匹配不同csv文件的列,当列值长度不同时不起作用

匹配不同csv文件的列,当列值长度不同时不起作用

我在一个大 csv 文件和一个小 csv 文件之间匹配 3 列,并将它们写入输出文件。这里有很多问题有帮助,但我找不到我遇到的具体问题的答案。当列条目较短时,它找不到匹配项。

我的解决方案基于这里的解决方案:比较不同文件的两列,如果匹配则打印

匹配的列应该是small1 == large120002、small2 == large120003、small3 == large120004。

我正在尝试什么...

awk -F, 'NR==FNR{c[$1,$2,$3]++;next};c[$120002,$120003,$120004] > 0' small.csv large.csv > output.csv

这有点有效。这不包括 large120002 是长度小于 9 个字符的 int 的行。 (到目前为止,large120002 的值的长度为 7-9 个字符)。

以前遇到过这个问题吗?如果可能的话,我想坚持使用 awk 解决方案。

答案1

结果发现这是一个转换问题,因此我在列中添加了 0,以确保 awk 对两者进行相同的处理。

在...的帮助下:https://stackoverflow.com/questions/5808971/casting-to-int-in-awk

这最终工作了..

awk -F, 'NR==FNR{c[$1+0,$2,$3]++;next};c[$120002+0,$120003,$120004] > 0' small.csv large.csv > output.csv

相关内容