首页 > 解决方案 > AWK 比较两个文件并打印单个列

问题描述

在使用 awk 脚本比较两个文件时我需要帮助。将 file1.csv 的第二列与 file2.csv 的第一列进行比较,如果匹配,则以以下预期格式打印该行。

文件 1.csv

abc,id123,newyork
bcd,id456,seattle

文件2.csv

id678,bbb,ccc
id123,hhh,ddd

期望格式:

abc,id123,hhh,newyork,{hhh,ddd},ddd

到目前为止,我可以打印到以下内容

abc,id123,newyork,hhh,ddd

使用以下 awk,

$ awk -F, 'FNR==NR{f1[$2]=$0; next} $1 in f1 {print f1[$1] "," $2 "," $3}' file1.csv file2.csv

标签: awk

解决方案


你很亲密。尝试:

$ awk -F, 'FNR==NR{f1[$2]=$1; f3[$2]=$3; next} $1 in f1 {printf "%s,%s,%s,%s,{%s,%s},%s\n",f1[$1],$1,$2,f3[$1],$2,$3,$3}' file1.csv file2.csv
abc,id123,hhh,newyork,{hhh,ddd},ddd

这里的关键补充是使用第二个数组f3来捕获输入并 printf获得完全格式化的输出。


推荐阅读