Как сравнить один текстовый файл с примерно двумя дюжинами других текстовых файлов и распечатать определенные столбцы каждой строки в случае совпадения?

У меня есть «FileA»:

10 10011300 10011301 TC 10 10012494 10012495 GA 10 10028691 10028692 AT 10 10093496 10093497 GA 10 10102457 10102458 CT 10 10103252 10103253 GC 10 10122271 10122272 TC 10 10128778 10128779 TC 10 10130299 10130300 CA 10 10148307 10148308 GA 

и у меня есть файлы 1-22:

 1 10177 rs367896724 1 10235 rs540431307 1 10352 rs555500075 1 10505 rs548419688 1 10506 rs568405545 1 10511 rs534229142 1 10539 rs537182016 1 10542 rs572818783 1 10579 rs538322974 1 10616 rs376342519 

Как вы могли бы сказать, я имею дело с генетическими данными. Я хочу, чтобы каждый раз, когда столбцы 1 и 3 из FileA совпадали со столбцами 1 и 2 из файлов 1-22, столбцы 1, 2 и 3 из файлов 1-22 (или столбцы 1 и 3 из FileA и столбец 3 из файлов 1 -22) печатаются в текстовый файл с номером, общим для FileA и файлов 1-22 в столбце 1 в качестве имени текстового файла.

До сих пор я застрял на сортировке файлов, чтобы иметь возможность вызывать join . FileA продолжает выдавать мне ошибку, хотя я пытаюсь отсортировать ее точно так же, как мне удалось отсортировать файлы 1-22.

По сути, я надеюсь на учебник, чтобы сделать именно то, что я пытаюсь сделать здесь. Я проверил с несколькими различными источниками и пытался это несколько раз безрезультатно.

Команды, которые я использовал:

sort -k 1,1 FileA.txt

join -j 1 File1.txt FileA.txt > output.txt

РЕДАКТИРОВАТЬ:

Вот пример желаемого выхода

 18 3320671 rs375411568 18 3320673 rs550898405 18 3320676 rs73366565 18 3320704 rs536519819 18 3320720 rs118037107 18 3320736 rs566910986 18 3320755 rs567626849 18 3320786 rs183777311 18 3320860 rs528977928 18 3320887 rs577743595 18 3320897 rs530122744 

Это выглядит очень похоже на предыдущий пример файлов 1-22, и это потому, что это по сути то же самое. Я хочу для совпадений между столбцами 1 и 3 из FileA со столбцами 1 и 2 файла x (x – любой один файл из серии файлов с номерами 1-22; в этом примере – 18), строка, соответствующая соответствующей строке файла x появляется и сохраняется в output.txt.

Ладно, я действительно забыл, что задал этот вопрос, но кто-то только что проголосовал за этот пост, и с тех пор я разобрался в этом, поэтому я продолжу и отправлю ответ.

Для первого fragmentа вывода, который я перечислил выше,

 10 10011300 10011301 TC 10 10012494 10012495 GA 10 10028691 10028692 AT 10 10093496 10093497 GA 10 10102457 10102458 CT 10 10103252 10103253 GC 10 10122271 10122272 TC 10 10128778 10128779 TC 10 10130299 10130300 CA 10 10148307 10148308 GA 

все, что мне нужно было сделать, это использовать следующую команду awk,

cat [inputfile.txt] | awk '{print $1"_"$3"\t"$4"\t"$5}' | sort -k1,1 > outputfileA.txt

Вывод будет выглядеть следующим образом, и все строки будут отсортированы по первому столбцу:

 10_10011301 TC 10_10012495 GA 10_10028692 AT 10_10093497 GA 

Я также сделал бы то же самое для второго fragmentа кода,

 1 10177 rs367896724 1 10235 rs540431307 1 10352 rs555500075 1 10505 rs548419688 1 10506 rs568405545 

и используйте аналогичную команду awk для создания другого файла:

 cat [inputfile.txt] | awk '{print $1"_"$2"\t"$3}' | sort -k1,1 > outputfileB.txt 

В результате чего:

 1_10177 rs367896724 1_10235 rs540431307 1_10352 rs555500075 1_10505 rs548419688 1_10506 rs568405545 

Поскольку оба этих выходных файла имеют один общий столбец, и эти столбцы отсортированы одинаково, мы можем затем вызвать команду join:

join -1 1 -2 2 outputfileA.txt outputfileB.txt | tr ' ' '\t' > outputfileC.txt

tr ' ' '\t' переводит все пробелы во вкладки в выводе. Все строки с одинаковыми совпадениями между первым столбцом первого файла и первым столбцом второго файла записываются в выходной файл, который может выглядеть примерно так:

 1_101850899 AC rs138958619 1_101856556 TC rs191666242 1_101867058 CT rs188447998 1_101874381 AC rs143747209 1_101877269 GA rs186149522 1_101878704 CA rs192815769 1_101885657 GT rs150829467 1_101891797 TG rs141886478 1_101893793 TA rs182950692 1_101897192 TC rs189527356 

Надеюсь, я это хорошо объяснил. Дайте мне знать, если мне нужно что-то уточнить.