美文网首页
awk实战7-去掉双引号中间的字符串包含的逗号

awk实战7-去掉双引号中间的字符串包含的逗号

作者: 渐悟懂劲 | 来源:发表于2020-02-15 21:08 被阅读0次

1、问题举例

有时候,文本文件中的数量、金额等数字会用千分位隔开,例如下面的例子file.csv,营收字段用千分位分隔,并用双引号括起来,表示这是一个字段的数据,避免跟其他字段混淆:

月份,企业,员工数,营收,利润
201901,企业A,1500,"1,234,567.89",400
201902,企业B,300,900.01,100

当金额没有超过1000时,就不存在千分位,也没有双引号。

那么,我们就不能简单的用awk -F"," 来指定逗号为分隔符对文件进行处理,因为awk不能区分千分位和逗号分隔符。

推而广之,问题就是我们如何去除双引号中间的逗号。

2、处理方法

因为文件中有的行有双引号,有的行没有双引号,所以我们先处理带双引号的行。

处理的关键是把双引号作为字段分隔符,这样我们就可以把两个双引号中间部分的字符串提取出来,并利用gsub函数把逗号全部替换为空。

命令:
awk -F"\"" '/".*"/ {gsub(",","",$2); print $1$2$3}'  file.csv

输出:
201901,企业A,1500,1234567.89,400

说明:

awk -F"\""   是指定双引号为分隔符
/".*"/       是用正则表达式匹配有两个双引号的行
gsub(",","",$2)   是把两个双引号中间的字符串中的逗号全部替换为空

不带双引号的行直接输出即可,完整命令如下:

awk -F"\"" '! /".*"/ {print $0} /".*"/ {gsub(",","",$2); print $1$2$3}' file.csv

注意,这里要把不带双引号的部分 ! /".*"/ {print $0} 原样输出放在前面处理,原因是gsub函数处理后$0中的双引号就没有了,会导致重复匹配。

相关文章

  • awk实战7-去掉双引号中间的字符串包含的逗号

    1、问题举例 有时候,文本文件中的数量、金额等数字会用千分位隔开,例如下面的例子file.csv,营收字段用千分位...

  • 以逗号分隔字符串,但忽略双引号内的逗号

    以逗号分隔字符串,但忽略双引号内的逗号 现有数据格式如下,需要以逗号分隔字符串,但忽略双引号内的逗号,即"Anem...

  • 数据操作小例子

    (1)字符串之间 去掉字符串中的逗号 字符串转数组

  • 1.5 PHP字符串

    单引号和双引号的区别PHP允许我们在双引号串中直接包含字串变量。而单引号串中的内容总被认为是普通字符。 去掉字符串...

  • python details

    字符串: 双引号内可包含单引号,单引号内可包含双引号,否则内部引号需要转义“字符串+*号+次数”:重复打印字符串 ...

  • 零基础小白Python入门必看:最详细之数据类型讲解

    字符串 字符串的坑: 三引号的字符串如果中间没有双引号的字符串,会在解释器中输出为双引号 三引号的字符串如果中间有...

  • python字符串中的引号

    字符串的单引号,双引号以及三引号其根本目的是为了方便程序员定义包含单引号或者双引号的字符串。 当字符串中包含单引号...

  • python函数基础

    字符串操作 删除 去掉两端字符串: strip(), rstrip(),lstrip() replace 去掉中间...

  • Sass字符串函数-quote($string)

    quote($string):给字符串添加双引号 如果字符串,自身带有引号会统一换成双引号 "" 字符串中间有单引...

  • awk

    积累awk 内置变量 分号,以及逗号作用 分号表示一个范围 分号表示分割 逻辑运算符 打印单引号 和双引号 设置变...

网友评论

      本文标题:awk实战7-去掉双引号中间的字符串包含的逗号

      本文链接:https://www.haomeiwen.com/subject/gwgyfhtx.html