キー値に基づいて2つのファイルを比較し、ファイル1に一致しないレコードを印刷したいと思います。使用される区切り記号はパイプです。|
- 出力は次のとおりです
I|234567|BCDE|234TFY|abc|12345
- ファイル1:
主な列:列2と列5I|123456|ABCD|123abc|xyz|23456 I|234567|BCDE|234TFY|abc|12345
- ファイル2:
主な列:列1と列4xyz|P|1001|123456 bcd|P|1001|123467
誰でも正しいアプローチが何であるかを提案できますかawk
?
ベストアンサー1
これを行うには、次のプログラムを使用できますawk
。
awk -F'|' 'FNR==NR{key1[FNR]=$1;key2[FNR]=$4;next}
{if ($2!=key2[FNR] || $5!=key1[FNR]) print}' file2.txt file1.txt
- まず、
file2.txt
各行の列1と4のリストを解析して作成します。ファイルFNR
ごとのラインカウンタがグローバルNR
ラインカウンタ(しかし、参考にしてください空になると破壊されますfile2.txt
! )。 - その後、解析時に各行の列
file1.txt
2と5の処理中に入力されたリストと比較し、一致しない場合はfile2.txt
行を印刷します。