awk-根据匹配的列合并 2 个 .csv 文件

awk-根据匹配的列合并 2 个 .csv 文件

我有两个 .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

相关内容