첫 번째 열에 동일한 항목이 있는 경우 Linux에서 모든 열을 개별적으로 추가하세요.

첫 번째 열에 동일한 항목이 있는 경우 Linux에서 모든 열을 개별적으로 추가하세요.

이 출력 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

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

관련 정보