Redisダンプファイルを読み取るためにシェルを使用しています。
ダンプファイルには、次の3つの主な列があります。
Text:tags:name 682651 520
Text:tags:age 78262 450
Value:cache 77272 672
Value:cache:name 76258 872
New:specific 77628 762
New:test 76628 8622
予想出力:
Key Count Sum
Text:* 2 970
Value:* 2 1544
New:* 2 9384
文字列(キー)で開始/中間/終了できるサブ文字列に基づいて列を確認できるので、上記の期待を得たいと思います。
ベストアンサー1
次のawk
プログラムがこれを行います。
awk '{split($1,f,/:/);count[f[1]]++;sum[f[1]]+=$3}
END{printf "Key\tCount\tSum\n"; for (k in count) {printf "%s:*\t%d\t%d\n",k,count[k],sum[k]}}' dump.txt
- これは最初に列1のキーをコンポーネント
:
に分割し、それを配列に保存しますf
。最初の項目(f[1]
)は、すべての追加処理のための関連キーと見なされます。 - 発生回数は、
count
キーをf[1]
配列インデックスとして使用して連想配列に格納されます。キーが見つかるたびに1ずつ増加します。 - 列3の値の合計は類似配列に格納されます
sum
。 - 最後に、プログラムはヘッダー行を印刷し、配列に見つかったすべての配列インデックスを繰り返して、配列
count
インデックス(=キー)、発生数、および合計値を印刷します。
キーが印刷される順序は、格納されたawk
配列の内部ロジックによって定義されます。 GNU Awkがある場合は、セクションの属性を設定して巡回順序を定義できますPROCINFO["sorted_in"]
。BEGIN
例えば
BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"}
awk
「キー」に基づいて項目がアルファベット順に昇順で印刷されます。