如何在unix中使用两列连接两个文件

如何在unix中使用两列连接两个文件

我有文件 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与lookup.txt加入等级和manager_id,并从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

您可以"-"用作分隔符,或其他字符串,或什么都不用。使用示例中的数据,无需分隔符即可工作。

相关内容