Filtr warunkowy Awk jeden plik oparty na innym (lub innych rozwiązaniach)

Początkujący programowanie potrzebuje pomocy w modyfikacji skryptu AWK, aby był warunkowy. Alternatywne rozwiązania inne niż awk są również mile widziane.

UWAGA Główne filtrowanie działa teraz dzięki pomocy Birei, ale mam dodatkowy problem, szczegóły poniżej.

Mam serię plików wejściowych o 3 kolumnach:

chr4    190499999   190999999
chr6    61999999    62499999
chr1    145499999   145999999

Chcę użyć tych wierszy do filtrowania innego pliku (refGene.txt), a jeśli wiersz w pliku jeden matematycznie wiersz w refGene.txt, wyprowadzić kolumnę 13 w refGene.txt do nowego pliku „ListofGenes_ $ f”. Podstępną częścią dla mnie jest to, że chcę, aby liczyć jako dopasowanie tak długo, jak kolumna pierwsza (np. „Chr4”, „chr6”, „chr1”), a kolumna 2 AND / OR kolumna 3 pasuje do równoważnych kolumn w refGene. plik txt. Kolumny równoważne między dwoma plikami to 1 $ = 3 $, 2 $ = 5 $, 3 $ = 6 $. Wtedy nie jestem pewien w awk, jak nie drukować całego wiersza z refGene.txt, ale tylko kolumnę 13.

UWAGA Osiągnąłem opisane powyżej filtrowanie warunkowe dzięki pomocy Birei. Teraz muszę włączyć dodatkowy warunek filtra. Muszę również wypisać kolumnę $ 13 z pliku refGene.txt, jeśli którykolwiek z regionów między wartością 2 $ i 3 $ pokrywa się z regionem pomiędzy 5 a 6 $ w pliku refGene.txt. Wydaje się to znacznie trudniejsze, ponieważ wymaga obliczeń matematycznych, aby sprawdzić, czy regiony się pokrywają.

Mój skrypt do tej pory:

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

Każda pomoc jest na prawdę doceniana. Dzięki wielkie!

Rubal

questionAnswers(1)

yourAnswerToTheQuestion