替换csv文件中字段中的换行符
我有一个有165列的CSV文件,我有一个问题。 我需要将列中的字符\r\n替换为空白,而不是行尾的字符,因为它是记录分隔符 输入:替换csv文件中字段中的换行符,csv,awk,sed,tr,Csv,Awk,Sed,Tr,我有一个有165列的CSV文件,我有一个问题。 我需要将列中的字符\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或任何需要的工具。因此,您需要对多行字
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或任何需要的工具。因此,您需要对多行字段进行分组。在这种情况下,让我们手动存储字符串,直到它足够大,也就是说,直到它有足够的字段知道记录已完成:
awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") $0}
f>=fields{print str; str=""; f=0}' file
当-v fields=5时,我们表示一个适当的行应该包含多少字段。然后,我们继续在str变量中存储数据,直到它至少有字段
还请注意,您正在使用Windows文件。要在UNIX中正常工作,请首先使用dos2unix文件将其转换为此格式。这将\r\n转换为\r\n
测验
旧版本,看起来需要删除文字\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其他内容,并在空格后将其他内容打印回来。因此需要对多行字段进行分组。在这种情况下,让我们手动存储字符串,直到它足够大,也就是说,直到它有足够的字段知道记录已完成:
awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") $0}
f>=fields{print str; str=""; f=0}' file
当-v fields=5时,我们表示一个适当的行应该包含多少字段。然后,我们继续在str变量中存储数据,直到它至少有字段
还请注意,您正在使用Windows文件。要在UNIX中正常工作,请首先使用dos2unix文件将其转换为此格式。这将\r\n转换为\r\n
测验
旧版本,看起来需要删除文字\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其他内容,并在空格后打印其他内容。注意,您可以在评论中给出反馈,并最终接受答案。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你有什么问题!抱歉耽搁了。首先,谢谢你的回答,但我想我解释得不对\r\n是回车符和换行符,不是字面意义上的\r\n。现在我明白了:您想加入多行字段。检查我的更新答案。它就像我的165字段CSV的魅力。非常感谢。请注意,您可以在评论中给出反馈,并最终接受答案。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你有什么问题!抱歉耽搁了。首先,谢谢你的回答,但我想我解释得不对\r\n是回车符和换行符,不是字面意义上的\r\n。现在我明白了:您想加入多行字段。检查我的更新答案。它就像我的165字段CSV的魅力。非常感谢。