首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除CSV文件中的字段-内部换行符。

问删除CSV文件中的字段-内部换行符。
EN

Stack Overflow用户
提问于 2021-12-29 12:57:00
回答 1查看 60关注 0票数 -3

我尝试了不同的awk方法来实现这一点,但由于我并不真正理解awk的工作原理,所以我没有成功。

因此,我有一个大型csv文件,其中包含多行条目,如下所示:

代码语言:javascript
复制
"99999";"xyz";"text

that has

multiple newlines";"fdx";"xyz"

我需要去掉引号之间那些额外的换行符。

因为每一行的结尾都是双引号,然后是换行符,所以我想我可以创建一个命令来替换所有的换行符,除了用双引号加在前面的命令。

我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2021-12-29 13:34:03

您所需要的机会就是这样,使用GNU awk进行多个字符的RS:

代码语言:javascript
复制
awk -v RS='\r\n' '{gsub(/\n/," ")}1' file

由于您的输入可能是从像Excel这样的Windows导出的CSV,\r\n "line“结尾也是如此,但是字段中新行的\n是单独的。

或者,在多个字符RS和RT中再次使用GNU awk:

代码语言:javascript
复制
$ awk -v RS='"[^"]+"' -v ORS= '{gsub(/\n/," ",RT); print $0 RT}' file
"99999";"xyz";"text  that has  multiple newlines";"fdx";"xyz"

或者,如果要将新行的所有链压缩为单个空白,则为:

代码语言:javascript
复制
$ 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?。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70519736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档