編集:file1.txtの列1,2をfile2.txtの列1,3と一致させ、file2.txtの一致行を印刷したいと思います。
ファイル1.txt:
scaffold1 57482
scaffold1 63114
scaffold1 63118
scaffold1 63129
scaffold1 63139
scaffold1 63279
scaffold1 63294
scaffold2 65015
scaffold2 77268
scaffold2 77335
ファイル2.txt:
scaffold1 381 382 T/A +
scaffold1 384 385 T/A,G +
scaffold1 385 386 G/C +
scaffold1 445 446 C/T +
scaffold1 57481 57482 T/A +
scaffold1 63113 63114 T/A,G +
scaffold1 63128 63129 G/C +
scaffold2 65014 65015 G/A +
scaffold2 77267 77268 G/A +
scaffold2 77334 77335 C/T +
出力.txt:
scaffold1 57481 57482 T/A +
scaffold1 63113 63114 T/A,G +
scaffold1 63128 63129 G/C +
scaffold2 65014 65015 G/A +
scaffold2 77267 77268 G/A +
scaffold2 77334 77335 C/T +
ベストアンサー1
解決策awk
:
$ awk 'NR==FNR{a[$1$2]++;next}{if($1$3 in a){print}}' file1 file2
scaffold1 57481 57482 T/A +
scaffold1 63113 63114 T/A,G +
scaffold1 63128 63129 G/C +
scaffold2 65014 65015 G/A +
scaffold2 77267 77268 G/A +
scaffold2 77334 77335 C/T +
NR
現在の行番号とFNR
現在のファイルの現在の行番号。 2 つは、最初のファイルを読み取る場合にのみ同じです。したがって、最初のブロックは最初のファイルを読み取るときにのみ実行されるため、最初のファイルの最初と2番目のフィールドが配列に保存されますa
。次に、2番目のファイルを処理するときに最初と3番目のフィールドがある場合にのみその行を印刷します。つまり、a
最初のファイルにある場合にのみその行を印刷します。