выявить ошибку в операторе if - PullRequest
0 голосов
/ 01 декабря 2009

Вот полный код ..

Что я пытаюсь сделать, это ->

Я пытаюсь найти среднее значение во втором столбце файлов. Если в названии файла указано 2.54, я хочу найти средние значения в файлах file_2.54_even.xls и file_2.54_odd.xls. Если в названии файла нет 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 ]

1 голос
/ 01 декабря 2009

Поскольку ваша команда awk находится внутри одинарных кавычек, переменные оболочки file и f расширяться не будут. Вот почему вы получаете 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 или нет, а затем протолкнет этот список файлов с помощью одного awk сценария.

1 голос
/ 01 декабря 2009

Мне кажется, проблема в том, что вы сравниваете целые числа и строки.

Попробуйте

if [ $(f) -eq 2.54 ]

Хотя я не вижу полного кода, я не вижу, в какой строке находится ошибка.

Edit: пробуя это в cygwin, я не получаю ошибку, однако.

0 голосов
/ 01 декабря 2009

Разве вы не можете просто переместить перенаправление?

 awk 'sum+=$2 ;END {print "Average = " , sum/NR }' ${file}_${f}_even_v1.xls > ${file}_${f}_avrg.xls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...