テキストファイルのデータの複雑さを減らします。

テキストファイルのデータの複雑さを減らします。

私はこのファイルを持っています:

  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番目の列が合計され、s3行目((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

おすすめ記事