Linux

如何在獲取每個字元串的平均值的同時計算文件中所有字元串的出現次數

  • October 11, 2019

我試圖在不指定特定字元串的情況下計算出現次數,只是使用 cut 命令的輸出使用 grep 列印每個重複字元串的數量。然後我想使用 numaverage 獲得平均值,但我不確定如何在不首先刪除數字的情況下完成此操作。

我首先使用命令 cut -d " " -f 1 $file 將文件減半以僅查看左側 ex:

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

嘗試awk

awk '
   BEGIN{FS=OFS="\t"} # if your file is space-delimited, leave this out
   {c[$1]++;v[$1]+=$2}
   END{
       print "Name","count","Average"
       for(f in c){print f,c[f],v[f]/c[f]}
   }
' file

使用csvsql來自csvkit

如果您的文件是空格分隔的:

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

引用自:https://unix.stackexchange.com/questions/546243