代码之家  ›  专栏  ›  技术社区  ›  Sharat Chandra

在awk中打印变量

  •  2
  • Sharat Chandra  · 技术社区  · 16 年前

    在这个脚本中,我希望awk打印变量 $file , $f , $order sum/NR (全部在一行中)

    #!/bin/bash
    for file in pmb_mpi tau xhpl mpi_tile_io fftw ; do
        for f in 2.54 1.60 800 ;do
        if [ ${f} = 2.54 ]
        then 
            for order in even odd ; do
    #       echo ${file}_${f}_${order}_v1.xls >> P-state-summary.xls
            awk '{sum+=$2} END {print ${file}_${f}_${order}_v1.xls, sum/NR}' ${file}_${f}_${order}_v1.xls >> P-state-summary.xls
            done
        else
    #       echo ${file}_${f}_v1.xls >>  P-state-summary.xls
            awk '{sum+=$2} END {print  ${file}_${f}_v1.xls , sum/NR}' ${file}_${f}_v1.xls >>  P-state-summary.xls
        fi
        done
    done
    

    克劳德,你们中有人能帮我吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Dennis Williamson    16 年前

    您可以这样做:

    echo -n "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
    # or printf "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
    awk '{sum+=$2} END {print sum/NR}' "${file}_${f}_${order}_v1.xls" | 
        tee "${file}_${f}_avrg.xls" >> P-state-summary.xls
    

    使用 echo -n printf 如果没有“\n”,则输出文本时不带换行符,因此 awk 命令将跟在同一行上。我添加了一个空格作为分隔符,但您可以使用任何内容。

    使用 tee 将允许您只使用一个文件将输出写入单个文件和摘要文件 AWK 每个输入(订单)文件的调用。

        2
  •  3
  •   Community Mohan Dere    9 年前

    awk 不出去为你得到shell变量,你必须把它们作为 AWK 变量:

    pax> export x=XX
    pax> export y=YY
    pax> awk 'BEGIN{print x "_" y}'
    _
    pax> awk -vx=$x -v y=$y 'BEGIN{print x "_" y}'
    XX_YY
    

    还有另一种方法可以做到这一点,即使用双引号而不是单引号(因此 bash 替换之前的值 锥子 但是你必须开始逃跑 $ 符号和你的 AWK 命令:

    pax> awk "BEGIN {print \"${x}_${y}\"}"
    XX_YY
    

    我更喜欢使用显式变量创建。

    顺便问一下,你以前的相关问题还有另一个解决办法 here 这应该有效。