Ошибка с перенаправлением - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь найти среднее значение во 2-м столбце в некоторых файлах. Имена файлов имеют следующую структуру например:

tau_2.54_even_v1.xls
tau_2.54_odd_v1.xls
tau_1.60_v1.xls
tau_800_v1.xls

Другие имена файлов можно получить, заменив файл переменных другими переменными 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 ]

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

В предложении else вы пропустили знак доллара в имени входного файла для awk.

#-------v----------
${file}_${f}_v1.xls
2 голосов
/ 01 декабря 2009

Если ваши xls файлы являются электронными таблицами, я не думаю, что вы можете нормально читать их, используя awk. Вы должны преобразовать xls в какой-нибудь удобный формат файла, например csv, используя модуль perl здесь:

http://search.cpan.org/~ken/xls2csv/script/xls2csv

И теперь вы можете использовать awk поверх этого CSV-файла.

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

Одна проблема, которую я сразу вижу, состоит в том, что у вас есть знак доллара с переменной "сумма" в ваших awk скриптах.

Измените его, чтобы удалить знак доллара. Одна из строк будет выглядеть так:

        awk 'sum+=$2 ;END {print "Average = " , sum/NR > ${file}_${f}_${order}_avrg.xls }' ${file}_${f}_${order}_v1.xls
0 голосов
/ 01 декабря 2009

Я получил свой ответ. Вот код

#! / Bin / Баш

для файла в 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" >> Safe / P-state-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" >> Safe / P-state-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. Спасибо всем за ваши ценные предложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...