awk - 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 -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
获得完全格式化的输出。
推荐阅读
- java - BitTorrent,DHT,BEP42,计算我的 NodeId
- java - 字符串太大,无法使用 UTF-8 进行编码,而是写为“STRING_TOO_LARGE”
- typescript - Angular6错误:未捕获(承诺):TypeError:(中间值).map不是函数
- ios - 在不更改 BundleId 的情况下辞职 iOS 应用程序 .iPA 文件
- svg - 自定义标记的 SVG 折线
- javascript - 如何从 VueJs 中的 body 获取参数值?
- sql - 将两个不同查询的结果相加
- html - sqPaymentForm 不适用于 IOS 自动填充
- codenameone - 应用停止/恢复后将代号一组件保持在无效位置
- .net - .Net WebApi - CustomValidation 方法调用两次