ループの合計と計算

ループの合計と計算

5つのファイルがあり、各ファイルの最初の行に数字があります。

ファイル数とファイル内の数値の合計を計算できるforループを含むbashスクリプトを作成しようとしています。

これまでに試したことは次のとおりです。

for file in $* 
do
        $[head -1 $file] 
        echo $(head -1) 
done

合計と計算要素を組み合わせる方法はまだわかりません。

答え1

私はあなたがしたいことが次のように達成できると思います。

#!/bin/bash
sum=0
count=0
for file in "$@"
do
        number=$(head -1 "$file")
        count=$((count + 1))
        sum=$((sum + number))
done
echo "The sum of the $count file(s) is: $sum"

使用しているファイルの合計を保存するために変数を追加するだけですsum。その後、ループが実行されるたびにcount増加します。countまた、-変数numberにファイル行の先頭を追加しますsum

答え2

headawkを使用してこれを実行することもできますので、各ファイルは必要ありません。

gawk '{count += 1; sum += $1; nextfile} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

最初のルールは、数と合計を増やした後、次のファイルに移動し、各ファイルの最初の行を除くすべての行を無視します。では、END数字を印刷します。

nextfileGNUなので、他のバージョンでは機能しない可能性がありますawk。別のオプションは、最初の行でのみ明示的に機能することです。

awk 'FNR == 1 {count += 1; sum += $1} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

しかし、残りの行では何もしなくてもファイルを完全に読み込みます。

関連情報