特定の文字列を指定せずに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
使用先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