使用sed和awk将文件中的非双引号中的逗号分隔符替换为竖线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sed和awk将文件中的非双引号中的逗号分隔符替换为竖线相关的知识,希望对你有一定的参考价值。

原始文件:
$ vi 5.txt
"2018-08-13","aa,bb,cc,dd",zwfer,18,"qw,qe,r,ds,fd",888
"2018-08-13","dd,bb,cc",zwfer,18,"qw,r,ds,fd",888
"2018-08-13","aa,bb,cc,dd",zwfer,18,"qw,qe,r,ds,fd",888
"2018-08-13","aa,bb,cc",zwfer,18,"qw,fd",888
替换为
"2018-08-13"|"aa,bb,cc,dd"|zwfer|18|"qw,qe,r,ds,fd"|888
"2018-08-13"|"dd,bb,cc"|zwfer|18|"qw,r,ds,fd"|888
"2018-08-13"|"aa,bb,cc,dd"|zwfer|18|"qw,qe,r,ds,fd"|888
"2018-08-13"|"aa,bb,cc"|zwfer|18|"qw,fd"|888
双引号中的逗号不替换
命令:
$ sed ‘s/,/|/g‘ 5.txt | awk ‘BEGIN{FS=OFS="""} {for(i=2;i<=NF;i=i+2){$i=gensub(/|/,",","g",$i)};print $0}‘ >6.txt
$ more 6.txt
"2018-08-13"|"aa,bb,cc,dd"|zwfer|18|"qw,qe,r,ds,fd"|888
"2018-08-13"|"dd,bb,cc"|zwfer|18|"qw,r,ds,fd"|888
"2018-08-13"|"aa,bb,cc,dd"|zwfer|18|"qw,qe,r,ds,fd"|888
"2018-08-13"|"aa,bb,cc"|zwfer|18|"qw,fd"|888

以上是关于使用sed和awk将文件中的非双引号中的逗号分隔符替换为竖线的主要内容,如果未能解决你的问题,请参考以下文章

使用 awk 或 sed 在文件中动态替换字符串

格式化数据以使用sed或awk以逗号分隔记录

用户管理2

每个逗号分隔的 CSV 值到 PhpMyadmin 中的新行

linux 文本内容替换(awk/sed)

logstash切割日志,分隔符是中文逗号解析不了怎么办?