在这个脚本中,我希望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
Colud你们中的任何人都能帮助我吗?
答案 0 :(得分:3)
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
看到它们之前的值),但是你必须开始转义{{1} } {symbol}和$
命令中的各种其他内容:
awk
我更喜欢使用显式变量创建。
顺便说一下,您之前的相关问题here还有另一种解决方案可以解决。
答案 1 :(得分:1)
你可以这样做:
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
来将输出写入单个文件和摘要文件。