私はこのファイルを持っています:
1 2
2 7
3 4
4 7
5 3
6 7
7 1
8 2
9 4
私が望む出力は
1 13
2 17
3 7
私の入力には9行がありますが、2番目の列に合計を維持しながら3行に減らそうとします。たとえば、最初の列の1は2番目の列の1、2、3、13を表し、最初の行は加算(2 + 4 + 7)を表す式です。どんなアイデアがありますか? awk / perlまたは他のLinuxツールを使用できます。
ベストアンサー1
解決策は次のとおりですawk
。
awk '{ s+=$2; if (!(NR%3)) { k++; print k,s; s=0 } };
END { if (NR%3) { k++; print k, s } }' file.txt
最初の列を無視してk
出力行番号として生成することをお勧めします。 2番目の列が合計され、s
3行目((NR % 3) == 0
)ごとに出力され、アキュムレータがリセットされます。最後に残りの行がある場合は、残りの合計を出力します。
サンプルファイル出力
1 13
2 17
3 7
完全性のためにここに乾いたモジュロ3とENDブロックで冗長コードを処理する関数を使用するバージョン:
awk 'function outsum() { print ++k,s; s=0 };
{ s+=$2; if (!(NR%3)) { outsum() } };
END { if (NR%3) { outsum() } }' file.txt