【发布时间】:2021-10-25 10:00:36
【问题描述】:
样本输入数据::
cat test.csv
234,aa,bb,cc,30,dd
22,cc,
ff,dd,
40,gg
pxy,aa,,cc,
40
,dd
需要的输出::
cat test_new.csv
234,aa,bb,cc,30,dd
22,cc,ff,dd,40,gg
pxy,aa,,cc,40,dd
我尝试了各种awk 和sed 命令,似乎没有任何效果。
例如:: awk 'NR == 1{ printf $0; next } { printf "%s%s", (/^[0-9]+,/? ORS : ""), $0 } END{ print "" }'
awk 上方仅查找带有 "," 的数字字符,但如果数字出现在带有换行符的列中,这将创建额外的行。
输入文件包含 Control M 字符,我已经使用 dos2unix 删除了这些字符
【问题讨论】:
-
您好,我在 csv 文件的列之间添加了换行符。有没有办法在 unix CSV 文件中删除列内的换行符。试过这个 AWK 命令 awk 'NR == 1{ printf $0; next } { printf "%s%s", (/^[0-9]+,/? ORS : ""), $0 } END{ print "" }' ,这工作 99 % 好,但不能处理数字进入文件,列之间有换行符,并为相同创建一个新行
-
那么,您基本上只想用逗号替换每个序列
吗?你考虑过sed吗? -
它不仅仅是用逗号替换逗号和换行符,它就像替换两个逗号内的换行符一样。这也不应该影响行格式。这将读取一个内部包含 CLOB 列的 CSV 文件,并且在这些 CLOB 列中,我们需要处理换行符
-
但这不是和我说的一样吗?替换 comma-newline 等效于删除逗号后面的那些换行符,至少对于您的输入,这将提供您所请求的输出。
-
我提供了一个示例数据,但在实际数据中,我们可能不会一直有逗号与换行符。把它当作第二或第三列是excel中的一个clob列,我们有一个段落,其中有很多没有逗号的换行符。当我们以 csv 格式读取此文件时。它显示一行分成 8-10 行
标签: shell csv unix awk newline