我在一个大 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