Awk условный фильтр одного файла на основе другого (или других решений)
Начинающему программированию здесь нужна помощь в модификации скрипта AWK, чтобы сделать его условным. Альтернативные не-awk решения также очень приветствуются.
NOTE Основная фильтрация теперь работает благодаря помощи Birei, но у меня есть дополнительная проблема, подробности см. В примечании ниже.
У меня есть серия входных файлов с 3 столбцами, например, так:
chr4 190499999 190999999
chr6 61999999 62499999
chr1 145499999 145999999
Я хочу использовать эти строки для фильтрации другого файла (refGene.txt) и, если строка в файле одна объединяет строку в refGene.txt, для вывода столбца 13 в refGene.txt в новый файл "ListofGenes_ $ f". Сложность для меня заключается в том, что я хочу, чтобы он считался совпадением до тех пор, пока столбец один (например, «chr4», «chr6», «chr1»), а столбец 2 И / ИЛИ столбец 3 соответствует эквивалентным столбцам в файл refGene.txt. Эквивалентные столбцы между двумя файлами: $ 1 = $ 3, $ 2 = $ 5, $ 3 = $ 6. Тогда я не уверен в awk, как не печатать всю строку из refGene.txt, а только столбец 13.
NOTE Я добился условной фильтрации, описанной выше, благодаря помощи Birei. Теперь мне нужно включить дополнительное условие фильтра. Мне также нужно вывести столбец $ 13 из файла refGene.txt, если любая из областей между значениями $ 2 и $ 3 пересекается с областью между $ 5 и $ 6 в файле refGene.txt. Это кажется более хитрым, поскольку требует математических вычислений, чтобы увидеть, перекрываются ли регионы.
Мой сценарий до сих пор:
FILES=/files/*txt
for f in $FILES ;
do
awk '
BEGIN {
FS = "\t";
}
FILENAME == ARGV[1] {
pair[ $1, $2, $3 ] = 1;
next;
}
{
if ( pair[ $3, $5, $6 ] == 1 ) {
print $13;
}
}
' $(basename $f) /files/refGene.txt > /files/results/$(basename $f) ;
done
Любая помощь очень ценится. Спасибо!
Rubal