最初の列に同じエントリがある場合、Linuxですべての列を個別に追加します

最初の列に同じエントリがある場合、Linuxですべての列を個別に追加します

出力ファイル名.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

すべての数字を1つの列に加算すると、

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

j1 番目のフィールドは必要ないので、2 からカウントを開始し、200 ではなく NF (フィールド数) までカウントしていることに注意してください。この方法では、2 以上であれば任意の数のフィールドで機能します。次に、スクリプトは多次元配列 ( a[$1][j]) を使用して、最初のフィールドごとに、関連付けられているすべての値の配列が存在します。最後に、配列を反復処理し、必要に応じて出力します。

関連情報