ファイル内のすべての文字列の発生回数を計算し、各文字列の平均値を取得する方法

ファイル内のすべての文字列の発生回数を計算し、各文字列の平均値を取得する方法

特定の文字列を指定せずにgrepを使用して繰り返される各文字列の数を印刷するには、cutコマンドの出力を使用して発生回数を計算しようとしています。その後、numaverageを使用して平均を取得したいのですが、最初に数字を削除せずにこれを行う方法がわかりません。
まず、 cut -d " " -f 1 $file 次のコマンドを使用してファイルの左側の部分のみを表示できるように半分に減らしました。

NEUTRON   20.900103
PION-      0.215176
PION-     22.716532
NEUTRON    8.043279
PION+      1.374297
PION-      0.313350
PION+      0.167848

それまではただ

NEUTRON  
PION-     
PION-     
NEUTRON    
PION+      
PION-      
PION+      

このようにcut、grep、numaverageを一緒に実行するにはどうすればよいですか(例えば、cat、uniq、wcなどの他のコマンドが役に立ちます)。前の出力:

Name          count     Average
KAON-            1      5.489958
NEUTRON          2      14.471691
PHOTON          10      0.652727
PION-            5      5.145192
PION+            7      2.691639
PROTON           1      1.160216

ベストアンサー1

使用先csvsqlcsvkit

ファイルがスペースで区切られた場合:

csvsql -d' ' -S -H --query 'select a as Name, count(*) as count, avg(b) as Average from file group by a' file \
    | csvformat -D' '

または、ファイルがタブ区切りの場合:

csvsql -t -S -H --query 'select a as Name, count(*) as count, avg(b) as Average from file group by a' file \
    | csvformat -T

出力:

Name    count   Average
NEUTRON 2   14.471691
PION+   2   0.7710725
PION-   3   7.74835266667

次のコマンドを使用してインストールする必要がありますpip

pip install csvkit

おすすめ記事