![awk-根据匹配的列合并 2 个 .csv 文件](https://linux22.com/image/130977/awk-%E6%A0%B9%E6%8D%AE%E5%8C%B9%E9%85%8D%E7%9A%84%E5%88%97%E5%90%88%E5%B9%B6%202%20%E4%B8%AA%20.csv%20%E6%96%87%E4%BB%B6.png)
我有两个 .csv 文件(以逗号分隔),其中有很多行。以下是这两个文件的示例条目:n.csv:
X,I180,10.5.5.180,,833-006366,00,N-D,,,5.2,A52.604,5.2.02,,,,,,,8471 FX,,,,,
文件.csv:
X,3FE,1,I180,,,,I180:LT13,,,,,,,,,,,0,,,,,,NLS-A
我想做的是:
- 1) 获取 f.csv 的字段:$2,$4,$8,$12,$25 并将它们打印到新输出 .csv 文件的第一列;
- 2) 如果 n.csv 的 $2 与 f.csv 的 $4 匹配,则获取 n.csv 文件的 $7 字段,并将其打印到新输出 .csv 文件的最后一列。
所以期望的输出应该是:
3FE,I180,I180:LT13,,NLS-A,N-D
我尝试了以下命令,但它确实在最后一列中打印了 n.csv 文件的 $7:
awk 'BEGIN { FS = OFS = "," ; } FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} { if ($4!="" && $4 in x) {print $2,$4,$8,$12,$25,ne_model[$2]} }' n.csv f.csv
3FE,I180,I180:LT13,,NLS-A,
您能帮我弄清楚我缺少什么吗?
答案1
你$2
从 到n.csv
不匹配f.csv
尝试
awk 'BEGIN { FS = OFS = "," ; }
FNR==NR{ne_model[$2]=$7;x[$2]=$2;next}
{ if ($4!="" && $4 in x) {print $2,$4,$8,$12,$25,ne_model[x[$4]]} }' n.csv f.csv
我替换ne_model[$2]
为ne_model[x[$4]]
(并为了可读性而分成多行)
这给了
3FE,I180,I180:LT13,,NLS-A,N-D