替换csv文件中字段中的换行符

替换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或任何需要的工具。因此,您需要对多行字

我有一个有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或任何需要的工具。

因此,您需要对多行字段进行分组。在这种情况下,让我们手动存储字符串,直到它足够大,也就是说,直到它有足够的字段知道记录已完成:

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的魅力。非常感谢。