web-dev-qa-db-ja.com

UNIXとawkの2つのファイルを比較する

File1とfile2の2つのファイルを比較する必要があります。各ファイルには、|で区切られた56列があります。最初の列はファイル内の従業員番号です。2番目のファイルに同じ従業員番号が存在するかどうかを確認します。そうでない場合は、行全体を出力ファイルに書き込みます。 file2に同じ従業員番号が存在する場合、各列の値を比較する必要があります。データが一致しない場合は、出力ファイルに書き込む必要があります。各列の値が一致する場合は、そのレコードを省略する必要があります。

サンプルファイル
ファイル1

2620|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality and Wipro Way|||
2623|256034|131021|Mission Quality and Wipro Way|||

ファイル2

2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
2623|256034|131021|Mission Quality and Wipro Way|||

サンプル出力:

2620|256034|131021|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
5

ファイルがソートされている非常に簡単な場合は、diffでタスクを実行します

comm -13 File1 File2
5
Costas

awkを使用できます。例:.

awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2

あなたの例を使用してFile1およびFile2

$ awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2
2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
0
steeldriver