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
head
awkを使用してこれを実行することもできますので、各ファイルは必要ありません。
gawk '{count += 1; sum += $1; nextfile}
END {printf "count: %d\t sum: %d\n", count, sum}' *
最初のルールは、数と合計を増やした後、次のファイルに移動し、各ファイルの最初の行を除くすべての行を無視します。では、END
数字を印刷します。
nextfile
GNUなので、他のバージョンでは機能しない可能性がありますawk
。別のオプションは、最初の行でのみ明示的に機能することです。
awk 'FNR == 1 {count += 1; sum += $1}
END {printf "count: %d\t sum: %d\n", count, sum}' *
しかし、残りの行では何もしなくてもファイルを完全に読み込みます。