スクリプトの終わりを反映するために合計を取得しようとしていますが、36962
正しく機能しません。$TOTAL
どんな提案がありますか?これは学校のプロジェクトで、私は初めてBashに触れました。
TOTAL=0
while read p; do
awk '{ if ($1 > 100 ) print TOTAL+=$1}'
echo $TOTAL
done < ipuniq.txt
- 6578
- 6723
- 32735
- 36962
- エコ -> 0
ベストアンサー1
このTOTAL
変数はシェル変数なので、awk
不明です。awk
コマンドでは、TOTAL
変数は繰り返されるたびに設定されないため、毎回単一の値にリセットされ、印刷されます。
awk
さらに、このようなループに使用するのは無意味です。
awk
次の1つのパッドを使用して直接これを実行できます。
awk '$1 > 100 { total+=$1 } END { print total }' ipuniq.txt
ループや他のコマンドは必要ありません。
ただし、課題にbash / shellを使用する必要がある場合は、次のようにします。
total=0
while read -r p _; do
((p>100)) && total=$((total+p))
done < ipuniq.txt
echo "$total"
これはシェル算術式を使用して値がp
100より大きいことを確認し、その場合に追加しますtotal
。
-r
また、注:このオプションをコマンドに追加したのは、read
バックスラッシュを文字通り印刷するためです。 (ユースケースには必要ありませんが、-r
この方法を使用しない特別な理由がない限り、常に使用することをお勧めします。)
また、不要な入力に設定されないよう _
にパラメータ名を追加しました。残りのすべての単語を最後のパラメータに割り当てるので、ファイルに数字とIPが含まれているとします。例:p
read
1 10.10.10.10
2 10.10.10.11
問題をキャプチャするパラメータがない場合は、p
次のように設定されます。
p='1 10.10.10.10'
それから:
p='2 10.10.10.11'