我正在尝试在某些文件中找到第二列中的平均值。 文件名具有以下模式 例如:
tau_2.54_even_v1.xls
tau_2.54_odd_v1.xls
tau_1.60_v1.xls
tau_800_v1.xls
其他文件名可以通过用oter变量pmb,xhpl等替换变量文件来获得。 这是我写的脚本.. 任何人都可以找到错误并让我知道吗?
#!/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
awk 'sum+=$2 ;END {print "Average = " , $sum/NR > ${file}_${f}_${order}_avrg.xls }' ${file}_${f}_${order}_v1.xls
done
else
echo ${file}_${f}_v1.xls
awk 'sum+=$2 ;END {print "Average = " , $sum/NR > ${file}_${f}_avrg.xls }' ${file}_{f}_v1.xls
fi
done
done
答案 0 :(得分:2)
我立刻看到的一个问题是你的awk
脚本中有一个带有变量“sum”的美元符号。
更改它以删除美元符号。其中一条线看起来像这样:
awk 'sum+=$2 ;END {print "Average = " , sum/NR > ${file}_${f}_${order}_avrg.xls }' ${file}_${f}_${order}_v1.xls
答案 1 :(得分:2)
在else子句中,您错过了输入文件名中的美元符号为awk。
#-------v----------
${file}_${f}_v1.xls
答案 2 :(得分:2)
如果您的xls文件是电子表格,我不认为您通常可以使用awk阅读它们。 您应该使用perl模块将xls转换为一些方便的文件格式,如csv:
http://search.cpan.org/~ken/xls2csv/script/xls2csv
现在你可以在那个csv文件上使用awk了。
答案 3 :(得分:0)
我得到了答案。这是代码
#!/斌/庆典
用于pmb_mpi中的文件tau xhpl mpi_tile_io fftw;做
for f in 2.54 1.60 800 ; do
if [ ${f} = 2.54 ]
then
for order in even odd ; do
awk '{sum+=$3}; END {print "\n${file}_${f}_${order}_v1.xls " sum/NR}' ${file}_${f}_${order}_v1.xls >> Safe/P-state-summary.xls
done
else
awk '{sum+=$3}; END {print"\n${file}_${f}_v1.xls " sum/NR}' ${file}_${f}_v1.xls >> Safe/P-state-summary.xls
fi
done
完成
awk输出重定向存在问题。谢谢大家的宝贵建议