2つのファイルのデータを比較し、ファイル2の順序で欠落しているデータを含む出力ファイルを生成する方法

2つのファイルのデータを比較し、ファイル2の順序で欠落しているデータを含む出力ファイルを生成する方法

私は初めてシェルスクリプトに触れて、次のようにしたいと思います。似たようなものが使えると思いますgrep -xvFf file1 file2が、出力ファイルを正しい順序で生成する方法がわかりません。

次のようにfile1があります。

CustomerName     CustomerID
Joe                  1
Kenny                2
Craig                3
Pearl                4

file2 には次の内容があります。

CustomerName      CustomerID
Pearl
Kenny
Joe
Craig

だから私が達成したいのは、2つのファイルを比較して欠落しているデータを見つけ、そのデータをfile2と同じ順序で3番目のファイルに出力することです。したがって、出力ファイルは次のようになります。

CustomerName      CustomerID
Pearl                 4
Kenny                 2
Joe                   1
Craig                 3

どんな洞察力でもいいでしょう。

答え1

使用awk:

awk 'NR==1 { print; }
     NR==FNR && FNR>1{ customerIds[$1]=$2; next }
     FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }
' OFS='\t' file1 file2

使用時にヘッダーラインを一度印刷しますNR==1 { print; }
その後、保存ファイル1customerIds$1(キーはcustomerName、値はIds)という連想配列です$2

NR==FNR && FNR>1{ customerIds[$1]=$2; next }

次に確認してみましょう。ファイル2、customerNameが配列に存在する場合は、customerIdscustomerNameと$1上記で保存した同じ配列のIDを印刷します。

FNR>1 && ($1 in customerIds) { print $1, customerIds[$1]; }

答え2

$ awk 'NR==FNR{a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2
CustomerName     CustomerID
Pearl                4
Kenny                2
Joe                  1
Craig                3

関連情報