【问题标题】:printing columns in awk在 awk 中打印列
【发布时间】:2012-09-21 20:32:42
【问题描述】:

我在 shell 脚本中使用 awk,它按预期工作。

awk -F'^' 'BEGIN {OFS="^"} {print $1,$2,$3,$4,$5}'

当我需要更改列数时,我只需通过添加 $6,$7,$8 来更改打印语句

有没有办法在变量中声明它并在 awk 中使用该变量?

columns=8
awk -F'^' 'BEGIN {OFS="^"} {print $1..$columns}'

【问题讨论】:

    标签: awk


    【解决方案1】:

    通过定义一个函数来实现。 awk 'function col(s,e){ret="";for(i=s;i<=e;i++){ret=ret" "$i}return ret}{print col(2,6)}'

    【讨论】:

      【解决方案2】:

      您可以使用awk -v 指定一个shell 变量,然后循环遍历所有列:

      awk -v cols="$columns" '{ for (i=1; i<=cols; i++) printf (i!=cols) ? $i OFS : $i"\n" }' file.txt
      

      【讨论】:

        【解决方案3】:

        你总是可以使用for-loop

         {for(i=1;i<=columns;i++)printf("%s ", $i);print '\n'}'
        

        在循环后使用printfprint 将在行尾提供换行符。

        【讨论】:

          【解决方案4】:

          这可能会实现您的目标:

          column=8
          awk '{print $'$column'}'
          

          参考: http://www.grymoire.com/Unix/Awk.html#uh-4

          【讨论】:

            【解决方案5】:

            这可能对你有用:

            echo 1 2 3 4 5 6 7 8 9 | awk -vnf=5 '{NF=nf}1'
            1 2 3 4 5
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-04-03
              • 2020-09-03
              • 1970-01-01
              • 2011-04-26
              • 1970-01-01
              • 1970-01-01
              • 2011-01-06
              相关资源
              最近更新 更多