【问题标题】:How to print variable inside awk如何在awk中打​​印变量
【发布时间】:2010-12-22 04:38:05
【问题描述】:

我希望 awk 如下解释变量

#!/bin/bash

file=tau
f=2.54
order=even

awk '{sum+=$2}; END {print '${file}_${f}_${order}_v1.xls', sum/NR}'
${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

我想要的输出如下 -

tau_2.54_even_v1.xls   sum/NR

有人可以帮我解决这个问题吗?

【问题讨论】:

标签: bash scripting awk


【解决方案1】:

我想这就是你想要的:

#!/bin/bash

file=tau
f=2.54
order=even

awk "{sum+=\$2}; END {print \"${file}_${f}_${order}_v1.xls\", sum/NR}" \
  ${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

【讨论】:

    【解决方案2】:

    首先,如果您希望在awk 等子进程的环境中传递环境变量,则需要export

    其次,可以使用ENVIRON["name"]获取awk中的环境变量。所以以下对我有用:

    #!/bin/bash
    
    export file=tau
    export f=2.54
    export order=even
    
    awk '{sum+=$2}; END {print ENVIRON["file"] "_" ENVIRON["f"] "_" ENVIRON["order"] "_v1.xls", sum/NR}'
    

    【讨论】:

      【解决方案3】:

      别忘了你可以在命令行设置“AWK变量”

      awk -v FOO=bar '...<AWK code that uses the AWK variable FOO>...'
      

      【讨论】:

      • 即:### 日期 | awk -v USER=$USER '{ print USER ": " $0 }' ### rzr: Sat Nov 30 18:25:24 CET 2013 ###
      【解决方案4】:

      好吧,我混合使用了上述解决方案,并得到了它的使用

      printf "\n${file}_${f}_${order}_v1.xls  " >> Safe/P-state-summary.xls
      awk '{sum+=$3}; END  {print sum/NR}' ${file}_${f}_${order}_v1.xls >> Safe/P-state-summary.xls
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 2014-05-13
        相关资源
        最近更新 更多