リストから複数のアイテムの総数を計算する方法

リストから複数のアイテムの総数を計算する方法

私はbashとその構文に最初に触れたので、ハードドライブの全在庫数を取得するためにリストをソートする方法を知りたいです。

例は次のとおりです。私たちはさまざまなベンダーやモデルの多くのサーバーとハードドライブを持っています。

名前の出現ではない数字に基づいてどのように一緒に数えますか?

ST8000NC0002: 8
ST900MM0168: 1
ST900MM0168: 1
ST9300603SS: 3
ST9300605SS: 4
ST9500620SS: 3
WD1003FBYX: 7
WD1500HLFS: 4
WD9001BKHG: 3
WD9001BKHG: 3
WD9001BKHG: 4
WD9001BKHG: 4

希望の出力:

ST8000NC0002: 8 
ST900MM0168: 2 
ST9300603SS: 3 
ST9300605SS: 4 
ST9500620SS: 3 
WD1003FBYX: 7 
WD1500HLFS: 4 
WD9001BKHG: 14

ベストアンサー1

awkまさにこれのためです。data最初のフィールド()でインデックス付けされた配列()を埋め、2番目のフィールド()の値を$1累積します。$2配列を埋めた後、単純なforループを使用してデータを出力します。便宜上、出力はパイプで接続されていますsort

awk '{data[$1]+=$2} END { for( d in data ) { print d, data[d] } }' input | sort
ST8000NC0002: 8
ST900MM0168: 2
ST9300603SS: 3
ST9300605SS: 4
ST9500620SS: 3
WD1003FBYX: 7
WD1500HLFS: 4
WD9001BKHG: 14

おすすめ記事