【问题标题】:Parsing data with awk使用 awk 解析数据
【发布时间】:2014-05-02 01:34:51
【问题描述】:

我为 bash 编写脚本,但我需要帮助处理脚本的一部分。我有这种格式的值

1,12, 3,70, 2,29
1,12, 3,78, 2,79
1,12, 3,27, 2,25

我需要转换成这种格式

1.12 3.70 2.29
...
...

所以我需要将逗号更改为点,并删除数字后面的逗号。我想用 awk 来做,但我不知道该怎么做。我可以将其解析为 3 个不同的文件,然后通过命令 paste 拆分为一个,但我想做得更有效。谢谢。

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    使用 sed:

    sed 's/,\([0-9]\)/.\1/g;s/,//g;' file
    1.12 3.70 2.29
    1.12 3.78 2.79
    1.12 3.27 2.25
    

    这基本上是两阶段方法,其中第一个操作用点替换数字后面的逗号,第二个操作只是删除剩余的逗号。

    【讨论】:

    • 其实我从你的回答中得到了线索。为此 +1。
    【解决方案2】:
    perl -pE '$_=~s/(\d+),(\d+)/$1.$2/g; $_=~s/,//g'
    

    【讨论】:

    • 大概可以简化为perl -lpe '$_=~s/(\d+),(\d+),*/$1.$2/g' file
    • @JS웃 感谢您的评论!我同意。
    【解决方案3】:

    这是一个使用awk的:

    $ awk -F', ' '{$1=$1;gsub(/,/,".")}1' file
    1.12 3.70 2.29
    1.12 3.78 2.79
    1.12 3.27 2.25
    
    • 将字段分隔符设置为逗号和空格。
    • 重新构造整行以允许默认分隔字段OFS(空格)。
    • 使用gsub, 替换为.

    【讨论】:

      【解决方案4】:

      这个 sed 命令也可以工作,

      sed 's/, / /g;s/,/./g' file
      
      • s/, / /g - 仅用空格替换逗号和空格。

      • s/,/./g - 从上述命令的输出中,它将, 替换为.

      例子:

      $ echo "1,12, 3,70, 2,29" | sed 's/, / /g;s/,/./g'
      1.12 3.70 2.29
      

      【讨论】:

      • 无需转义空格。
      【解决方案5】:
      awk -F, '{for (i=1; i<NF; i+=2) {printf "%s.%s", $i, $(i+1)}; print ""}' <<END
      1,12, 3,70, 2,29
      1,12, 3,78, 2,79
      1,12, 3,27, 2,25
      END
      
      1.12 3.70 2.29
      1.12 3.78 2.79
      1.12 3.27 2.25
      

      【讨论】:

        【解决方案6】:

        这也有效。使用 -e 选项,您可以将 sed 命令添加到同一实例:

        sed -e s/", "/" "/g -e s/","/./g file1
        

        【讨论】:

          【解决方案7】:

          awk 解决方案。

          awk '{sub(/, /," ");gsub(/,/,".")}1' file
          1.12 3.70. 2.29
          1.12 3.78. 2.79
          1.12 3.27. 2.25
          

          【讨论】:

            猜你喜欢
            • 2012-04-16
            • 1970-01-01
            • 2012-12-24
            • 2017-04-07
            • 1970-01-01
            • 1970-01-01
            • 2019-04-05
            • 2020-10-17
            • 2015-01-12
            相关资源
            最近更新 更多