bash - пересечение двух файлов на основе определенных столбцов? - PullRequest
5 голосов
/ 20 июня 2011

Я хочу сделать следующее и был бы очень признателен, если бы кто-нибудь смог мне помочь в этом:

У меня есть 2 файла с разделителями табуляции с именами File1.txt и File2.txt (как показано ниже).Если 2-й столбец (целое число) в File1.txt находится в 3-м столбце (целое число) в File2.txt, то я хочу создать new_File1.txt и new_File2.txt и продолжать добавлять строки.

File1.txt:

1   80  xyc
1   304 xyv
1   813653  xyb
1   813661  xyn
1   954653  xym

File2.txt:

abvb    1   178
aaa 1   304 
ttt 1   353
ggg 1   98971
ghj 1   813653

Так, например, мой new_File1.TXT будет выглядеть так:

new_File1.txt:

1   304 xyv
1   813653  xyb

new_File2.txt:

aaa     1   304
ghj     1   813653

Спасибовам всем за помощь!Я использовал:

join -1 2 -2 3 -t '\t' file1.txt file2.txt

, но это дает мне следующий вывод:

\1      80      xyc\abvb        1       178
\1      80      xyc\aaa 1       304
\1      80      xyc\ttt 1       353
\1      80      xyc\ggg 1       98971
\1      80      xyc\ghj 1       813653
\1      304     xyv\abvb        1       178
\1      304     xyv\aaa 1       304
\1      304     xyv\ttt 1       353
\1      304     xyv\ggg 1       98971
\1      304     xyv\ghj 1       813653
\1      813653  xyb\abvb        1       178
\1      813653  xyb\aaa 1       304
\1      813653  xyb\ttt 1       353
\1      813653  xyb\ggg 1       98971
\1      813653  xyb\ghj 1       813653
\1      813661  xyn\abvb        1       178
\1      813661  xyn\aaa 1       304
\1      813661  xyn\ttt 1       353
\1      813661  xyn\ggg 1       98971
\1      813661  xyn\ghj 1       813653
\1      954653  xym\abvb        1       178
\1      954653  xym\aaa 1       304
\1      954653  xym\ttt 1       353
\1      954653  xym\ggg 1       98971
\1      954653  xym\ghj 1       813653

1 Ответ

5 голосов
/ 20 июня 2011

Вы ищете join(1).

...