【发布时间】:2020-11-18 12:26:03
【问题描述】:
开始问题
我有一个这样形成的 CSV 文件 (variable.csv)
E,F,G,H,I,J
a1,
,b2,b3
c1,,,c4,c5,c6
如您所见,第一列和第二列没有所有需要的逗号。这就是我想要的:
E,F,G,H,I,J
a1,,,,,
,b2,b3,,,
c1,,,c4,c5,c6
有了这个,现在每一行都有正确的列数。换句话说,我正在寻找一个 unix 命令,它巧妙地将正确数量的逗号附加到每行的末尾,以根据标题使该行具有我们期望的列数.
根据一些搜索,这是我尝试过的:
awk -F, -v OFS=, 'NF=6' variable.csv。这适用于上述情况,但是...
最后一个问题
...如果列数据本身包含逗号,甚至是换行符,我们可以让这个命令工作吗?例如
E,F,G,H,I,J
"a1\n",
,b2,"b3,3"
c1,,,c4,c5,c6
到
E,F,G,H,I,J
"a1\n",,,,,
,b2,"b3,3",,,
c1,,,c4,c5,c6
(如果此示例的格式因换行符的表示方式而导致格式错误,请致歉。
【问题讨论】:
-
您的命令似乎适用于您的示例。
NF=6是一个赋值,返回 true,然后用额外的逗号打印。有没有行不行? -
@thanasisp 是的,这似乎是特定于机器的问题。此外,我意识到我的问题的核心缺少一个关键部分,所以我更新了主要问题以添加它。
-
awk -v FPAT='([^,]*)|("[^"]+")' -v OFS=, 'NF=6' variable.csv将起作用,忽略引用文件中的逗号。见:stackoverflow.com/questions/29642102/…
标签: bash shell unix awk command