最初の列項目が繰り返されるすべての項目の列平均を取得します。

最初の列項目が繰り返されるすべての項目の列平均を取得します。

次のファイルがあります。

30901 foo1 bar1 89
30902 foo2 bar2 51
30903 foo3 bar3 101
30903 foox bary 12
30903 fooz bara 23
30903 foob barc 62
30904 fooe barf 59
...
...

私の出力を次のように出力したいです。

30901 89
30902 51
30903 49.5
... 

49.530903は、列1のid:の4つの重複項目の4列目の平均です。

私ができることは、
cat <logfile> | awk '{print $1}' | uniq -c
最初の列(id)に基づいて重複する項目数を取得する固有の項目数を取得することです。

ベストアンサー1

努力する

 awk '{c[$1]++ ; t[$1]+=$4 }  
    END { for (cc in c ) if ( c[cc]>1 ) printf "%s : %.1f\n",cc,t[cc]/c[cc];}' file.log

これは

30903 : 49.5

出力を取得するには、if (c[cc]>1)セクションを削除します。

スクリプトは基本的に値を計算してc[$1]++追加t[$1]+=$4します。

  • c[x]count(x) の場合、つまり$1最初のフィールド
  • t[x]4番目のフィールドの合計値の合計であるtotal(x)。

最後に、すべての値を繰り返し、平均を計算して印刷します。

おすすめ記事