最初の行に番号が付いた5つのファイルがあります。
ファイルの数(カウント)とファイル内の数の合計の両方を計算できるforループを組み込んだbashスクリプトを記述しようとしています。
これは私がこれまでに試みたものです:
for file in $*
do
$[head -1 $file]
echo $(head -1)
done
Sumとcount要素をどのように組み込むかはまだわかりません。
あなたがやろうとしていることはこれで達成できると思います:
#!/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
を追加します。
これをawkを使用して行うこともでき、ファイルごとにhead
を使用する必要がなくなります。
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}' *
ただし、残りの行で何もしなくても、ファイルは完全に読み取られます。