Eine Schleife über die gesamte Spaltensumme kann wie folgt in der folgenden TXT-Datei durchgeführt werden:
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
Jetzt möchte ich etwas anderes machen. Ich möchte zum Beispiel die zweiten Spalten bis zu dem Punkt summieren, an dem die Zahlen der ersten Spalte gleich sind, und dann wieder von vorne beginnen. Ist das mit seen[$1] möglich?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
wobei 1 $ als Indexwert behandelt wird.
Ich konnte es nicht zum Laufen bringen, indem ich seen[$1]
. Oder gibt es eine andere gute Möglichkeit, die Schleife zu erstellen?
Das Ergebnis sähe so aus:
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
und so weiter... bis zur gesamten Spalte.
Antwort1
$ 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
Antwort2
Wenn Sie nur eine Eingabedatei mit awk verwenden möchten:
$ 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