我有一个包含165列的CSV file
,我遇到了问题。
我需要用列中的空格替换\r\n
个字符,而不是从行尾替换,因为它是记录分隔符。
输入:
001|Baker St.
London|3|4|7
002|Penny Lane
Liverpool|88|5|7
输出:
001|Baker St. London|3|4|7
002|Penny Lane Liverpool|88|5|7
我使用的是Windows脚本,但我愿意使用UnxTools (gawk, sed, tr)
或其他任何需要的内容。
答案 0 :(得分:5)
因此您需要对多行字段进行分组。在这种情况下,让我们手动存储字符串直到它足够大",也就是说,直到它有足够的字段来知道记录完成:
awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") $0}
f>=fields{print str; str=""; f=0}' file
使用-v fields=5
,我们指出正确的行应包含多少个字段。然后,我们会继续将数据存储在str
变量中,直到它至少包含fields
个字段。
另请注意您正在使用Windows文件。要在UNIX中正常工作,请先使用dos2unix file
将其转换为此格式。这会将\r\n
转换为\n
。
$ awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") $0} f>=fields{print str; str=""; f=0}' file
001|Baker St. London|3|4|7
002|Penny Lane Liverpool|88|5|7
(旧版本,当您看起来需要删除文字\r\n
)
只需确保在\r\n
之后显示某些内容,以便不匹配行尾
$ sed -r 's/\\r\\n(.)/ \1/g' file
001|Baker St. London|3|4|7\r\n
002|Penny Lane Liverpool|88|5|7\r\n
这会查找\r\n
加上另一个东西,并在空格后打印其他东西。