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