Linuxで2行ごとに値を合計する方法

Linuxで2行ごとに値を合計する方法

次のデータがあります。

入力.txt

1 0000100101000000
1 0000010100000000
2 1110000001000000
2 1111000000001000
3 0000000111111111
3 1111111100000000
4 8888345500000000
4 0000000000000000

同じ行番号を持つ2行ごとに値を合計したいと思います。出力:

出力.txt

1 0000110201000000
2 2221000001001000
3 1111111211111111
4 8888345500000000

どんな提案がありますか?私の実際のデータには、各行に45000個の数字を持つ8000個の行があります。

ベストアンサー1

全体的なawkソリューションはどうですか?

awk 'BEGIN { tag = -1; sum = 0}
    {
        if (tag != $1) {
            if (tag > -1) {printf "%d %016d\n",  tag, sum;}
            tag = $1; sum = $2
        } else { sum += $2 }
    }
    END {print tag, sum}'  input.txt

入力が最初の列に基づいてソートされているかどうかはわかりません。次のことができます。次にそれを上記のスクリプトsort -k1.1n input.txtにパイプします。awk

おすすめ記事