【发布时间】:2019-06-13 20:49:02
【问题描述】:
我正在合并两个 csv 文件。为简单起见,我只显示相关的列。两个文件中的列都多于四列。
file_a.csv
col2, col6, col7, col17
a, b, c, 145
e, f, g, 101
x, y, z, 243
file_b.csv
col2, col6, col7, col17
a, b, c, 88
e, f, g, 96
x, k, l, 222
输出应如下所示:
col2, col6, col7, col17, col18
a, b, c, 145, 88
e, f, g, 101, 96
所以当 col2、col6 和 col7 的内容匹配时,file_b 的 col17 作为 col18 添加到 file_a。
我试过这个:
awk -F, 'NR == FNR {a[$2,$6,$7] = $17;next;} {if (! (b = a[$2,$6,$7])) b = "N/A";print $0,FS,b;}' file_a.csv file_b.csv > out.csv
输出如下:
col2, col6, col7, col17,
, col18
a, b, c, 145
, 88
e, f, g, 101
, 96
因此,我尝试添加的 file_b 中的第 17 列确实被添加了,但显示在新行上。
我认为这是因为file_a和file_b的每一行后面都有回车。在 Notepad++ 中,我可以看到 CRLF。但我无法摆脱它们。另外,我宁愿不经过两个步骤:首先摆脱回车然后合并。相反,如果我可以在合并期间绕过回车,它会快得多。
另外,如果您能告诉我如何去掉分隔合并列的逗号前后的空格,我将不胜感激。请注意,为了更好的可读性,我在列之间放置了空格,并在其他列中放置了逗号。实际文件中的情况并非如此。但是合并文件中col17和","和col18之间确实有空格,不知道为什么。
如果您坚持将此标记为重复,请在下面的评论中解释上一个问题的答案如何解决我的问题。我尝试从以前的类似问题中弄清楚,但失败了。
【问题讨论】:
标签: csv awk merge text-processing