Цикл по всей сумме столбца можно выполнить с помощью следующего текстового файла:
101 10
101 10
101 10.10
101 13
101 10
101 10
102 10.140
102 10
102 10
102 0.90
102 10
103 10
104 10
111 11
111 11
111 5.485e+12
111 11
awk '{sum+=$2;} END{print sum;}' file1.txt > sum_a.txt
Теперь я хотел бы сделать что-то другое. Например, я хотел бы суммировать вторые столбцы до тех пор, пока числа в первых столбцах не станут одинаковыми, и начать снова. Можно ли это сделать с помощью seen[$1]?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
где 1 доллар рассматривается как значение индекса.
Я не смог запустить его с помощью seen[$1]
. Или есть какой-нибудь другой хороший способ сделать цикл?
Результат будет таким:
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
и так далее... до всей колонны.
решение1
$ awk 'NR==FNR{sum[$1]+=$2; next} {print $1, sum[$1]}' file file
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033
решение2
Если вы просто хотите использовать только один входной файл с помощью awk:
$ awk -v c=1 '{ a[$1]+=$2;b[c]=$1;c+=1} END { for( i=1;i<=NR;i++ ){key=b[i]; print key" "a[key]} }' file1.txt
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033