【问题标题】:How can I trim white space from a variable in awk?如何从 awk 中的变量中修剪空白?
【发布时间】:2012-04-16 15:36:41
【问题描述】:

假设 $2 是我的变量。我试过从

awk -F\, '{print $2 ":"}'

awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'

但它从打印一些东西到什么都不打印。

【问题讨论】:

    标签: linux bash shell awk


    【解决方案1】:

    您正在打印gsub 的结果,但gsub$2 进行了就地修改,而不是返回修改后的副本。拨打gsub,然后打印:

    awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
    

    【讨论】:

      【解决方案2】:

      这些函数可以方便地提高可读性。它们还返回修剪后的结果:

      function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
      function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
      function trim(s) { return rtrim(ltrim(s)); }
      BEGIN {
      # whatever
      }
      {
      # whatever
      }
      END {
      # whatever
      } 
      

      来源:https://gist.github.com/andrewrcollins/1592991

      【讨论】:

        【解决方案3】:

        (我没有足够的积分直接评论上一个答案。)

        要在$2结尾处修剪空白,请使用:

        awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
        

        要在$2开头修剪空格,请使用:

        awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}'
        

        对于结束和开始:

        awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}'
        

        【讨论】:

        • 看来第三行可以简写为awk -F\, '{gsub(/^[ \t]+|[ \t]+$)/, "", $2); print $2 ":"}'。注意那个强大的管道标志! :)
        【解决方案4】:

        gawk 的一个衬里:

        gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'
        

        【讨论】:

          【解决方案5】:

          Unix 中的 ltrim 和 rtrim

          awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt

          【讨论】:

            【解决方案6】:

            更简单的选择:

            您必须定义修剪功能,使用 gsub 进行一般替换。如果以空格开头或结尾(一次或多次),则使用正则表达式查找,返回该字段。

               awk -F'|' 'function trim(field){
               gsub(/^ +| +$/,"", field); 
               return field
               }{
               OFS=",";
               print trim($2),trim($3)}' stations > lista.csv
            

            有了这段代码就够了

            stations 文件的结构如下:

                 1 | UTAR | U de Tarapacá                   
                 3 | VALN | Valparaíso                      
                 4 | JRGN | Junta Gorgino                   
                 6 | TRPD | Torpederas  
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-11-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-04-09
              • 2012-11-23
              • 2016-08-03
              相关资源
              最近更新 更多