
이 출력 filename.txt가 있습니다.
AC1481523 001 001 001 001
AC1481523 005 005 005 005
AC1481676 003 003 005 004
AC1481676 003 002 001 004
첫 번째 열의 값이 동일한 모든 열을 별도로 추가하고 싶습니다. 나는 이것을 시도했다
awk '{for (j = 1; j <= 200; j++) a[$1]+=$j} END {for(i in a) print i,a[i] }' filename.txt
나는 단일 열에 모든 숫자를 더한 결과를 얻습니다.
AC1481523 24
AC1481676 25
하지만 나는 원한다
AC1481523 6 6 6 6
AC1481676 6 5 6 8
답변1
한 가지 방법은 다음과 같습니다.
$ 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
j
첫 번째 필드를 원하지 않기 때문에 2부터 계산을 시작했고 200이 아닌 NF(필드 수)까지 계산했습니다. 이렇게 하면 >= 2인 한 임의의 수의 필드에 대해 작동합니다. 그런 다음 , 스크립트는 다차원 배열( a[$1][j]
)을 사용하므로 각 첫 번째 필드에 대해 연관된 모든 값의 배열이 있습니다. 마지막으로 배열을 반복하여 필요에 따라 인쇄합니다.