最初のファイルの最初の列と2番目のファイルの2番目の列を比較して一致させます。

最初のファイルの最初の列と2番目のファイルの2番目の列を比較して一致させます。

ファイル1:Excelファイル(.xls)

UN          ID    St      M1    M2       SE    DOF  PV        PA            FC
17127159    0   -5.9    297.3   765.7   0.22    4   0.003   0.00389231  2.57536
17127163    2   -3.87   189.914 492.307 0.3548  4   0.0179  0.01795     2.59226
17127167    4   -3.8908 339.136 855.276 0.3429  4   0.0176  0.017       2.52192
17127171    6   -3.922  390.44  986.365 0.340   4   0.0172179   0.01721 2.52627
17127175    8   -4.715  536.072 1210.65 0.2492  4   0.00920158  0.00920 2.258

ファイル2:テキストファイル(.txt)

UNIT_ID   UN      TID        X       E       GG7     J     O
0      17127159 16657436 353.568 335.295 221.717 815.654 684.85
1      17127161 16657436 11.0842 7.01459 7.33511 11.2121 12.6268
2      17127163 16657450 221.647 226.774 136.274 431.32  392.533
3      17127165 16657452 5.02182 3.41172 4.12834 6.90306 4.91183

最初のファイルの最初の列が2番目のファイルの2番目の列と一致する場合は、2番目のファイルの3列から9列の一致する行を抽出して最初のファイルに保存します。

誰が私を助けることができますか?

出力は新しいファイルに保存する必要があります。

出力:

UN        ID   St  M1    M2    SE   DOF PV    PA    FC    TID     X  E  GG7  J O
17127159  0   -5.9  297.3   765.7   0.22    4   0.003   0.00389231  2.57536  16657436 353.568 335.295 221.717 815.654 684.85

ベストアンサー1

解決策awk

$ awk 'NR==FNR{a[$2]=$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9; next} 
              {
                if($1 in a){
                    print $0,a[$1]
                }
               }' file2 file1
UN          ID    St      M1    M2       SE    DOF  PV        PA            FC TID  X   E   GG7 J   O   
17127159    0   -5.9    297.3   765.7   0.22    4   0.003   0.00389231  2.57536 16657436    353.568 335.295 221.717 815.654 684.85  
17127163    2   -3.87   189.914 492.307 0.3548  4   0.0179  0.01795     2.59226 16657450    221.647 226.774 136.274 431.32  392.533 

説明する

awkは、各入力行をフィールド(デフォルトでは空)に分割して最初のフィールドを2番目のフィールド$1にする$2式に進みます。特殊変数NRは現在の入力行番号であり、これはFNR読み取っているファイルの現在の行番号でもあります。したがって、複数のファイルを処理する場合、最初のファイルを読み取るときにのみ2つのファイルが同じです。

  • NR==FNR{a[$2]=$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9; next}:最初のファイルを読み取る場合は、フィールド3〜9(タブ付き)をaキーが2番目のフィールドである配列の値として保存します。その後、そのnext行にジャンプします。
  • これにより、nextスクリプトの残りの部分がfile2最初のファイル()に対しては実行されず、2番目のファイル(file1)に対してのみ実行されます。

  • if($1 in a){ print $0,a[$1] }:これは2番目のファイル()にありますfile1。最初のフィールドaが配列()のキーとして存在する場合は、現在の行とif($1 in a)フィールド3〜9に$0格納されている値を印刷します。a$1file2

おすすめ記事