あなたのアプローチは、仕事をしていませんが、それはやり過ぎ何とかです:あなたは、ファイルをcat
ティンの列の数をカウントし、awk
を呼び出している、一人でawk
はそれのすべてを行うことができますが:
awk -F"\t" '{for(i=1; i<=NF; i++) sum[i]+=$i} END {for (i in sum) print i, sum[i]}' file
これをNF
を利用して、ラインに含まれるフィールドの数を格納します(これは、count=$(grep -c $'\t' $1)
で行っています)。次に、フィールドをループして配列のすべての要素に合計します。sum[i]
には、列の合計が含まれます。i
。最後に、結果をループして値を書き込みます。
あなたのアプローチが特定の列を合計しないのはなぜですか?あなたが言うときので:
for n in $(seq 1 $count) ;do
cat $FILE | awk '{sum+=$1} END{print "sum=",sum}'
done
あなたは常に合計に要素として$1
を使用しています。あなたが唯一の解決策はbashの組み込みをしたい場合は、これがうまくいく
awk -v col="$n" '{sum+=$col} END{print "sum=",sum}' $FILE # no need to cat $FILE
脇に:[shellcheck.net](http://shellcheck.net)でコードを貼り付けることで、コードを改善するためのヒントを得ることができます。 – mklement0
[bashを使用してファイル内の各列を合計する方法](http://stackoverflow.com/questions/14956264/how-to-sum-each-column-in-a-file-using-bash) –