キー値に基づいてレイアウトが異なる2つのファイルを比較し、出力を3番目のファイルに抽出します。

キー値に基づいてレイアウトが異なる2つのファイルを比較し、出力を3番目のファイルに抽出します。

キー値に基づいて2つのファイルを比較し、ファイル1に一致しないレコードを印刷したいと思います。使用される区切り記号はパイプです。|

  • 出力は次のとおりです
    I|234567|BCDE|234TFY|abc|12345
    
  • ファイル1:
    I|123456|ABCD|123abc|xyz|23456
    I|234567|BCDE|234TFY|abc|12345
    
    主な列:列2と列5
  • ファイル2:
    xyz|P|1001|123456
    bcd|P|1001|123467
    
    主な列:列1と列4

誰でも正しいアプローチが何であるかを提案できますか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.txt2と5の処理中に入力されたリストと比較し、一致しない場合はfile2.txt行を印刷します。

おすすめ記事