最初の列に同じ項目がある場合は、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

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])を使用して各最初のフィールドに関連するすべての値を含む配列があります。最後に、配列を繰り返して必要に応じて印刷します。

おすすめ記事