替换csv文件中字段中的换行符
Replacing newline character in a field in csv file
我有一个包含 165 列的 CSV file
,但我遇到了问题。
我需要用列中的空白 space 替换 \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)
或任何需要的脚本。
因此您需要对多行字段进行分组。在那种情况下,让我们手动存储字符串直到它是 "big enough",即直到它有足够的字段知道记录是完整的:
awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") [=10=]}
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:"") [=11=]} 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(.)/ /g' file
001|Baker St. London|3|4|7\r\n
002|Penny Lane Liverpool|88|5|7\r\n
这会查找 \r\n
加上另一件事,并在 space 之后打印另一件事。
我有一个包含 165 列的 CSV file
,但我遇到了问题。
我需要用列中的空白 space 替换 \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)
或任何需要的脚本。
因此您需要对多行字段进行分组。在那种情况下,让我们手动存储字符串直到它是 "big enough",即直到它有足够的字段知道记录是完整的:
awk -F"|" -v fields=5 '{f+=NF; str=(str?str OFS:"") [=10=]}
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:"") [=11=]} 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(.)/ /g' file
001|Baker St. London|3|4|7\r\n
002|Penny Lane Liverpool|88|5|7\r\n
这会查找 \r\n
加上另一件事,并在 space 之后打印另一件事。