
Ich habe diese Ausgabedateiname.txt
AC1481523 001 001 001 001
AC1481523 005 005 005 005
AC1481676 003 003 005 004
AC1481676 003 002 001 004
Ich möchte alle Spalten einzeln hinzufügen, wobei die erste Spalte den gleichen Wert hat. Ich habe dies versucht
awk '{for (j = 1; j <= 200; j++) a[$1]+=$j} END {for(i in a) print i,a[i] }' filename.txt
Ich bekomme alle Zahlen in einer einzigen Spalte addiert und bekomme
AC1481523 24
AC1481676 25
Aber ich möchte
AC1481523 6 6 6 6
AC1481676 6 5 6 8
Antwort1
Hier ist eine Möglichkeit:
$ awk '{ for (j = 2; j <= NF; j++) a[$1][j]+=$j }
END {
for(i in a){
printf "%s", i;
for(field in a[i]){
printf " %s",a[i][field]
}
print ""
}
}' file
AC1481676 6 5 6 8
AC1481523 6 6 6 6
Beachten Sie, dass ich bei 2 angefangen habe j
zu zählen, da wir das 1. Feld nicht wollen und bis NF (die Anzahl der Felder) statt 200. Auf diese Weise funktioniert es für eine beliebige Anzahl von Feldern, solange sie >= 2 ist. Dann verwendet das Skript ein mehrdimensionales Array ( a[$1][j]
), sodass es für jedes erste Feld ein Array aller zugehörigen Werte gibt. Schließlich iterieren wir über das Array und drucken es nach Bedarf.