识别if语句中的错误

时间:2009-11-30 23:37:33

标签: bash scripting

这是完整的代码..

我要做的是这个 - >

我正在尝试查找文件第二列中值的平均值。 如果文件名称中包含2.54,我想查找名为file_2.54_even.xls和file_2.54_odd.xls的文件的平均值。如果fiename名称中没有2.54,那么只需找到文件的平均值即可。例如:file_1.60.xls

#!/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 
     echo ${file}_${f}_even_v1.xls
     awk 'sum+=$2 ;END {print "Average = " , $sum/NR > ${file}_${f}_avrg.xls }' ${file}_${f}_even_v1.xls
     echo ${file}_${f}_odd_v1.xls
     awk 'sum+=$2  ;END {print "Average = " , $sum/NR > ${file}_${f}_avrg.xls }' ${file}_${f}_odd_v1.xls
 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

3 个答案:

答案 0 :(得分:1)

我认为问题可能是你在比较整数和字符串。

尝试

if [ $(f) -eq 2.54 ]

虽然没有看到完整的代码,但我无法看到错误在哪一行。

编辑:在cygwin中尝试它然而我没有得到任何错误。

答案 1 :(得分:1)

由于您的awk命令位于单引号内,因此不会展开shell变量filef。这就是为什么你得到awk错误。

我会使用以下脚本:

#!/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
      flist=${file}_${f}_even_v1.xls ${file}_${f}_odd_v1.xls
    else
      flist=${file}_${f}_v1.xls
    fi
    cat ${flist} | awk '
      s+=$2;
      END {print "Average = ",$s/NR}
      ' >${file}_${f}_avrg.xls
    # Or use awk '...' ${flist} >${file}_${f}_avrg.xls
    # if you're overly concerned about efficiency of processes.
  done
done

这只会将flist设置为两个文件或一个文件,具体取决于f是否为2.54,然后通过单个{{1}推送该文件列表} script。

答案 2 :(得分:0)

你不能只移动重定向吗?

 awk 'sum+=$2 ;END {print "Average = " , sum/NR }' ${file}_${f}_even_v1.xls > ${file}_${f}_avrg.xls