Ваш подход делает работу, но это как-то излишество: вы подсчет количества столбцов, то 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
Этого использует , который хранит количество полей, которые имеет линия (это то, что вы делали с 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
в качестве элемента суммы. Вместо этого, вы должны передать значение $n
в AWK, используя что-то вроде:
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) –