2つの列のみを使用して2つのファイルを比較し、違いをソートせずに印刷する方法は?

2つの列のみを使用して2つのファイルを比較し、違いをソートせずに印刷する方法は?

2つのファイルがあります。

ファイル1:

No  ID  CV  CA1 CA2
1   transcr_10283   0.999023367236861   -0.344113101336184  -0.032235130455987
2   transcr_10371   -0.572755303094372  -0.579145581184253  0.879510598089221
3   transcr_10391   0.999589933675858   -0.379226454955611  -0.302057879326854
4   transcr_10428   0.128862262957329   0.579502720160717   -0.960283285879896
5   transcr_10673   -0.555906836336222  0.996418809959179   0.83927901939441
6   transcr_10719   -0.977601905205625  -0.297994976855801  -0.988480730161833
7   transcr_10805   -0.994387636575223  -0.924363947763111  -0.096820331033279
8   transcr_1084    0.929966893591254   0.994040100421911   0.604483398826667
9   transcr_10892   0.987734223438821   0.822187392097743   0.968727545498998
10  transcr_10892   0.999938729100654   -0.985209499864003  0.958993756142276

ファイル2:

No  ID  CV  CA1 CA2
1   transcr_8921    0.972442945255909   0.937065785923838   0.999643394568925
2   transcr_10428   0.128862262957329   0.808685528374441   -0.987431892147214
3   transcr_25793   -0.576556453265197  0.956853490465593   -0.712579124289414
4   transcr_1966    0.66610055219078    0.199587132187484   0.47438019134052
5   transcr_10428   -0.770206245250698  -0.434541952574813  0.413082695627957
6   transcr_20649   0.828958672046763   -0.301011711451322  0.85215236415901
7   transcr_11317   0.09699438477018    -0.728279374568874  -0.555587423971877
8   transcr_11317   -0.556544875244594  0.52241898249443    0.361144169769576
9   transcr_7135    0.525796225375268   -0.915309254508446  0.352117890583668
10  transcr_6234    -0.254737326090742  -0.842640701643698  0.435449408114073

file1(低い行数)と(file2より高い行数)を使用する列を含む結果ファイルが必要です。したがって、次のようなものを探しています。$2$3

No  ID  CV  CA1 CA2
1   transcr_10283   0.999023367236861   -0.344113101336184  -0.032235130455987
2   transcr_10371   -0.572755303094372  -0.579145581184253  0.879510598089221
3   transcr_10391   0.999589933675858   -0.379226454955611  -0.302057879326854
5   transcr_10673   -0.555906836336222  0.996418809959179   0.83927901939441
6   transcr_10719   -0.977601905205625  -0.297994976855801  -0.988480730161833
7   transcr_10805   -0.994387636575223  -0.924363947763111  -0.096820331033279
8   transcr_1084    0.929966893591254   0.994040100421911   0.604483398826667
9   transcr_10892   0.987734223438821   0.822187392097743   0.968727545498998
10  transcr_10892   0.999938729100654   -0.985209499864003  0.958993756142276

File2がソートされていないが、ファイルをソートせずに行う方法を探しています。

ありがとうございます!

編集:見やすくするために、transcr_10428 0.128862262957329この例ではfor行が削除されました。

ベストアンサー1

そしてawk

$ awk -v FS="\t" -v OFS="\t" 'NR==FNR {trans[$2"|"$3]++; next;} FNR==1 {print} FNR>1 {if(!trans[$2"|"$3]) print}' file2 file1
  • まずfile2、2列と3列の値を読み、使用してリストのキーとして保存します。
  • 読み込んだ場合は、file1ヘッダー行を印刷します。次の行では、前に作成したリストに2列と3列の値を持つキーが存在することを確認します。そうでない場合は、その行を印刷します。

おすすめ記事