AWK:カスタムチャンクサイズに列を分割し、各チャンクの各アイテムの数を合計して、すべてのチャンクの各アイテムの平均を提供します。

AWK:カスタムチャンクサイズに列を分割し、各チャンクの各アイテムの数を合計して、すべてのチャンクの各アイテムの平均を提供します。

awkを介して列項目を処理するのに役立ちます。私が試したいことは次のとおりです。

  • ユーザー定義のブロックサイズで列を分割します。
  • 各ブロックの各項目が計算され合計され、各項目の平均が最終ブロックサイズになります。

たとえば、以下はリストです。

1
2
3
4
5
6
7
8
9
10
11
12

ここではブロックサイズ4を使いたいですが(私の場合は状況によって異なるかもしれません)。

  • ブロック1
    1
    2
    3
    4
    
  • ブロック2
    5
    6
    7
    8
    
  • ブロック3
    9
    10
    11
    12
    

処理後、

5
6
7
8

これは、すべてのブロックで1、2、3、4位のアイテムの平均です。

ベストアンサー1

次のawkプログラムがこれを行います。データがdata.txt最初の列に保存されているとします(ただし、他の列に簡単に適用できます)。また、空の列はなく、完全なブロックしかないとします。

awk -v cs=4 '{if ((i=NR%cs)==0) {n_ch++; i=cs};buf[i]+=$1;} END{for (i=1;i<=cs;i++) printf "%d\n",buf[i]/n_ch}' data.txt

awkブロックサイズは文を介して渡されます。-v cs=size

各行について、「ブロック内の項目番号」を決定し、を渡してi項目 i = "line number" modulo "chunk size"を配列に合計しますbuf。ブロックが完了するたびにブロックカウンタがn_chインクリメントされます。

最後に、すべてのアイテム数の平均を印刷します。

おすすめ記事