特定の用語を含む行の列の合計

特定の用語を含む行の列の合計

同じ識別子を持つすべての行列を合計するsedコマンドがあるかどうかを知りたいです。awkたとえば、私のファイルはdata.txt次のようになりますが、約1800のデータ列と約1400の行が含まれています。

ABCD:1234  1.23  0.23  0.83   0
ABCD:1234    0    1.10  0.21   0 
EFGH:5678    0    1.90  0.12  8.21
IJKL:9999    1.22  0    1.84  9.21
IJKL:9999    1.44  0   12.94   0
IJKL:9999    1.32  0   24.12   2.43

後でコマンドがどのように見えるようにしたいか:

ABCD:1234  1.23  1.33  1.04  0
EFGH:5678    0    1.90  0.12  8.21
IJKL:9999   3.98   0   38.9  11.64

awkこれがsed(私は生物学者であり、まだUnixの基礎を学んでいます)で動作するかどうかわかりません。どんな助けでも大変感謝します。

ベストアンサー1

awk入力ファイルまたは結果テーブル全体をメモリに保存しないスクリプト:

FNR == 1   { for(i = 1; i <= NF; i++) a[i] = $i;  next }
$1 == a[1] { for(i = 2; i <= NF; i++) a[i] += $i; next }
{
    printf "%s", a[1]; a[1] = $1;
    for(i = 2; i <= NF; i++) { printf "\t%s", a[i]; a[i] = $i };
    printf "\n";
}
END {
    printf "%s", a[1];
    for(i = 2; i <= NF; i++) printf "\t%s", a[i];
    printf "\n";
}

実行してください:

awk -f script.awk data.txt

結果:

ABCD:1234       1.23    1.33    1.04    0
EFGH:5678       0       1.90    0.12    8.21
IJKL:9999       3.98    0       38.9    11.64

注:実際には動作しますsedが、まもなくそうすることはありません。バラよりここ理由を調べてください。

おすすめ記事