Unixで2つの列を使用して2つのファイルを結合する方法

Unixで2つの列を使用して2つのファイルを結合する方法

ファイルaとファイルルックアップがあり、構造は次のとおりです。

vi a.txt

empid|ename|sal_grade|MANAGER_ID
1|raj|A|202
2|MAN|B|203
3|JOS|C|204

vi lookup.txt

Grade|sal|manager_id
A|$100000|202
A|$1000|099
B|$1000000|203
B|$100|011

Output:
1|raj|A|202
2|MAN|B|203

command:

awk 'BEGIN {FS=OFS="|"} NR==FNR{a[$1];next} $3 in a{print $0}' lookup.txt a.txt >matched.txt

どちらのファイルでも、ランクと Manager_id は共通です。 a.txt を Rank と Manager_id を使用して Lookup.txt と結合し、a.txt からデータをインポートし、Lookup.txt から一致するものをインポートしようとしています。次のコマンドを試しましたが、ランク列のみを結合しましたが、ランク列と管理者ID列を結合する必要があります。

よろしくお願いします。

答え1

複合キーが必要な場合は、複合キーを構築してください。

awk '
  BEGIN { FS=OFS="|" }
  NR==FNR { a[$1 "-" $3]; next }
  ($3 "-" $4) in a { print $0 }
' lookup.txt a.txt > matched.txt

"-"区切り文字として使用したり、他の文字列として使用したり、何も使用できません。例のデータを使用すると、区切り文字なしで機能します。

関連情報