ファイル1の値をファイル2の値と一致させ、ファイル1に追加する関連情報を取得するにはどうすればよいですか?

ファイル1の値をファイル2の値と一致させ、ファイル1に追加する関連情報を取得するにはどうすればよいですか?

ファイルが2つあり、最初の行は参照用のヘッダー行です。

  • file1

    userId  userContact parentId  parentContact
    200     0900200     100       -
    201     0900201     100       -
    300     0900300     101       -
    
  • file2

    userId  userContact parentId  parentContact
    100     0900100     100       -
    101     0900101     100       -
    

4番目の列では、inをfile1検索してofをfromに置き換える必要があるため、出力は次のようになります。$3file1$1file2$2file2$4file1

  • output
    userId  userContact parentId  parentContact
    200     0900200     100       0900100
    201     0900201     100       0900100
    300     0900300     101       0900101
    

awkより速いので好む。

ベストアンサー1

使用join(ソートされた入力ファイルが必要なので、ソートされた入力を渡しました)。

join -1 3 -2 1 -o 1.1,1.2,1.3,2.2 <(sort -k3 file1) <(sort file2)
200 0900200 100 0900100
201 0900201 100 0900100
300 0900300 101 0900101

を使用すると、Joinは-1 3最初の入力ファイル(file1)のキーとして3番目の列を選択し、2番目の入力ファイル(file2)のキーとして1番目の列を-2 1選択-oこれらの列を出力します。<ファイル番号>.<列番号>

入力内容がタブ区切りファイルの場合は、-t$'\t'結合コマンドにも追加してくださいsort -k3 file1
ヘッダー行を印刷するには、head -n1 file1;結合の前に追加します。


または以下を使用してくださいawk

awk 'NR==FNR{ parentId[$1]=$2; next }
     FNR>1  { $4=parentId[$3] }1' file2 file1

おすすめ記事