重定向错误

时间:2009-12-01 07:12:37

标签: bash scripting

我正在尝试在某些文件中找到第二列中的平均值。 文件名具有以下模式 例如:

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

4 个答案:

答案 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

printf“\ n $ {file} $ {f} $ {order} _v1.xls”>>安全/ P-状态summary.xls

    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

printf“\ n $ {file} _ $ {f} _v1.xls”>>安全/ P-状态summary.xls

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

完成

awk输出重定向存在问题。谢谢大家的宝贵建议