0

I have a few text files with numbers (structure as below). I'd like to sum up every line form one file with ever line form other files (line1 from file1 + line1 from file2 etc.). I have written the bash script as following but this gives me the expr error.

function countHourly () {


for i in {1..24}
    do
        for file in $PLACE/*.dailycount.txt
            do
            SECBUFF=`head -n $i $file`
             VAL=`expr $VAL + $SECBUFF` ## <-- this cause expr error

        done
      echo line $i form all files counts: $VAL
done

}    

file structure *.dailycount.txt: 1 0 14 56 45 0 3 45 23 23 9 (every number in new line).

4

3 に答える 3

1

このhead -n NUMBER FILEコマンドは、最初の NUMBER 行を出力します。これは、 がループの 2 回目の実行になるSECBUFFことを意味し、 のようなものは有効な式ではないため、 からエラーが発生します。1 0expr 1 + 2 3expr

sedファイルから n 行目だけを取り出すために使用することもできますが、どうにかしてプログラムを再構築するべきではないでしょうか。

        SECBUFF=`sed -ne ${i}p $file`
于 2013-09-11T18:02:18.330 に答える
0

これは役に立ちます。そのバリエーションを使用すると、無効な行がある場合でも、合計に数値のみが追加されるように、非常に入力をチェックできます。

function countHourly {
    local NUMBERS TOTAL=0 I

    readarray -t NUMBERS < <(cat "$PLACE"/*.dailycount.txt)

    for I in "${NUMBERS[@]}"; do
        [[ $I =~ ^[[:digit:]]+$ ]] && (( TOTAL += I ))
    done

    echo "Total: $TOTAL"
}

または

function countHourly {
    local NUMBERS TOTAL=0 I

    while read I; do
        [[ $I =~ ^[[:digit:]]+$ ]] && (( TOTAL += I ))
    done < <(cat "$PLACE"/*.dailycount.txt)

    echo "Total: $TOTAL"
}
于 2013-09-11T18:01:26.417 に答える