我尝试了不同的awk方法来实现这一点,但由于我并不真正理解awk的工作原理,所以我没有成功。
因此,我有一个大型csv文件,其中包含多行条目,如下所示:
"99999";"xyz";"text
that has
multiple newlines";"fdx";"xyz"我需要去掉引号之间那些额外的换行符。
因为每一行的结尾都是双引号,然后是换行符,所以我想我可以创建一个命令来替换所有的换行符,除了用双引号加在前面的命令。
我该怎么做?
发布于 2021-12-29 13:34:03
您所需要的机会就是这样,使用GNU awk进行多个字符的RS:
awk -v RS='\r\n' '{gsub(/\n/," ")}1' file由于您的输入可能是从像Excel这样的Windows导出的CSV,\r\n "line“结尾也是如此,但是字段中新行的\n是单独的。
或者,在多个字符RS和RT中再次使用GNU awk:
$ awk -v RS='"[^"]+"' -v ORS= '{gsub(/\n/," ",RT); print $0 RT}' file
"99999";"xyz";"text that has multiple newlines";"fdx";"xyz"或者,如果要将新行的所有链压缩为单个空白,则为:
$ awk -v RS='"[^"]+"' -v ORS= '{gsub(/\n+/," ",RT); print $0 RT}' file
"99999";"xyz";"text that has multiple newlines";"fdx";"xyz"如果您需要其他任何东西,包括能够识别和使用每个输入“行”上的各个字段,请参见What's the most robust way to efficiently parse CSV using awk?。
https://stackoverflow.com/questions/70519736
复制相似问题