簡単な質問:私は簡単なスクリプトを書く必要があります。そのうちのいくつかは、列の各値を合計し、->各列とすべてを合計するものです。だからファイル
1 2 5
1 2
1
返す必要があります
column1: 3
column2: 4
column3: 5
sum: 12
私のコードはほとんど完璧ですが、列は昇順で表示されません。
if [[ $# -eq 0 ]]; then
awk '{ for (i=1;i<=NF;i++) sum[i]+=$i }; END { for (i in sum) print "column "i" : " sum[i];}' file.txt
awk '{for(i=1;i<=NF;i++) sum+=$i;}; END {print "sum: " sum}' file.txt
fi
出力は次のとおりです
➜ script ./sum.sh
column 2 : 4
column 3 : 5
column 1 : 3
sum: 12
なぜ2列から始めるのですか?
答え1
for (variable in array)
配列の各インデックスを指定されていない順序で変数に割り当てて繰り返す必要があります。
解決策
if [[ $# -eq 0 ]]; then
awk '(NF>m){m=NF}{for(i=1;i<=NF;i++)sum[i]+=$i}END{for(i=1;i<=m;i++)print("column "i" : "sum[i])}' file.txt
awk '{for(i=1;i<=NF;i++)sum+=$i}END{print("sum: "sum)}' file.txt
fi
出力
column 1 : 3
column 2 : 4
column 3 : 5
sum: 12