Linux
如何在獲取每個字元串的平均值的同時計算文件中所有字元串的出現次數
我試圖在不指定特定字元串的情況下計算出現次數,只是使用 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