私は初めてシェルスクリプトに触れて、次のようにしたいと思います。似たようなものが使えると思います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が配列に存在する場合は、customerIds
customerNameと$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