이 출력 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
200이 아닌 NF(필드 수)까지 첫 번째 필드가 필요하지 않기 때문에 2부터 세기 시작했습니다 . 이렇게 하면 2보다 큰 한 여러 필드에 사용할 수 있습니다. 그런 다음 스크립트는 다차원 배열( a[$1][j]
)을 사용하여 각 첫 번째 필드에 대해 연관된 모든 값을 포함하는 배열이 있습니다. 마지막으로 배열을 반복하여 필요에 따라 인쇄합니다.