У меня есть два файла. Первый файл выглядит так:
1 174392
1 230402
2 4933400
3 39322
4 42390021
5 80022392
6 3818110
и так далее
второй файл выглядит так:
chr1 23987 137011
chr1 220320 439292
chr2 220320 439292
chr2 2389328 3293292
chr3 392329 398191
chr4 421212 3292393
и так далее.
Я хочу вернуть всю строку, при условии, что первый столбец в ФАЙЛЕ1 = первая строка в ФАЙЛЕ2, поскольку совпадение строки И второй столбец в файле 2 больше, чем столбец 2 в ФАЙЛЕ2, но меньше, чем столбец 3 в ФАЙЛЕ2.
Таким образом, в приведенном выше примере строка 1 230402
в ФАЙЛЕ1 и chr1 220320 439292 в ФАЙЛЕ2 будут удовлетворять условиям, поскольку 230402 находится между 220320 и 439292, а 1 будет равна chr1 после того, как я сопоставлю строки, поэтому эта строка в ФАЙЛ2 будет напечатан.
Код, который я написал, был таким:
#!/bin/bash
$F1="FILE1.txt"
read COL1 COL2
do
grep -w "chr$COL1" FILE2.tsv \
| awk -v C2=$COL2 '{if (C2>$1 && C2<$2); print $0}'
done < "$F1"
Я пробовал много вариантов этого. Меня не волнует, полностью ли код написан на awk, полностью на bash или на смеси.
Кто-нибудь может помочь?
Благодарю вас!
the first column in FILE1 = the first column in FILE2
иthe 2nd column in FILE1 is greater than column 2 in FILE2
? - person Etan Reisner   schedule 23.05.2014