uniq -c もGUIへ — ヒット1万件の「よく出る値」を、31ミリ秒でランキング

技術解説

「含まない」(grep -v)、「単語一致」(grep -w)に続く、CLI機能シリーズの第3弾です。今回はチェックボックスではなく、ログ調査の定番ワンライナーそのものを載せました。

grep Tokyo big.log | grep -oE '...' | sort | uniq -c | sort -rn | head -20

ヒット行から値を切り出して、頻度順に並べる——障害調査でもデータ前処理でも、誰もが一度は打つパイプです。これを、私が開発している UwView Pro の多段階検索に「集計」として載せました。

実データでやってみる — 10,967件の中身が159種類に

例によって OpenStreetMap 日本の XML(総行数 892,239,125=8.9億行)です。1段目で Tokyo を検索すると10,967件。この1万件、中身はどんな傾向なのか?

集計欄に正規表現 k="([^"]+)" を入れて「集計」を押します。第1キャプチャ群——つまり k="..." の中身——をキーに、ヒット行を1パスで数えます。

UwView Proの多段階検索でTokyo 10,967件に集計を実行した画面。正規表現 k="([^"]+)" の第1キャプチャ群をキーに、10,967件/159種類/走査10,967行/31ミリ秒。name:en 4,848件(44.2%)を筆頭に頻度順のランキング表が出ている

結果は 10,967件/159種類/31ミリ秒。ランキングの上位はこうなりました。

順位 件数 構成比
1 name:en 4,848 44.2%
2 operator:en 1,909 17.4%
3 name:es 1,255 11.4%
4 wikimedia_commons 393 3.6%
5 name 392 3.6%

「Tokyo を含む行の44%は英語名タグ」——1万件を眺めていても見えてこない傾向が、表になった瞬間に見えます。上位N(既定20)は変更でき、表はCSV保存もできます。

GUIの勝ち所 — ランキングから原文へ、クリック1回

CLIの uniq -c で一番面倒なのは、集計のです。「name:es が1,255件? どんな行だ?」と思ったら、パイプを組み直してもう一度検索し直すことになります。

「集計」では、ランキングの行をクリックすると、その値を条件に次の段へ降りられます。集計→気になる値→原文の確認、が往復クリックで済みます。多段階検索の各段がタブとして残る仕組みはそのままなので、集計してから絞り込み、また別の値で集計し直す——という対話的な調査がひとつのダイアログで完結します。

CLIとの対応(近い動作の例)

CLI UwView Pro
grep Tokyo big.xml 1段目: Tokyo
grep -oE 'k="[^"]+"' \| sort \| uniq -c \| sort -rn 集計欄に k="([^"]+)" →「集計」
head -20 上位N(既定20・変更可)
> tally.csv CSV保存ボタン
(手でパイプを組み直す) ランキング行クリックで次の段へ

例によって、これは厳密な等価ではなく近い動作の例です。集計キーは正規表現の第1キャプチャ群(キャプチャの無い式はマッチ全体)で、数え方の細部はツールごとに違います。

正直な注記

  • 「集計」は v1.5.0 で正式リリース済みです。 スクリーンショットは開発中ビルドの画面のため、細部が異なる場合があります
  • 31ミリ秒はヒット行10,967行の走査時間です。8.9億行すべてを数えたわけではありません——多段階検索で絞った段の上で動くから、この速さになります
  • 数え方は grep -o | uniq -c の「出現回数」とは違い、1行につき同じ値は1回です。この仕様のおかげで、ランキングの件数とクリック降下後のヒット件数が必ず一致します(「uniq -c 互換」ではありません——近い動作の例です)
  • ユニーク値は20万種で打ち切られ、打ち切った場合はその旨と数えなかった件数が表示されます
  • 大きな段でも実用速度です: 3GB・1億行相当で7.0秒、48GB・8.9億行の139万ヒットで61.5秒(開発ビルドでの実測)
  • できるのは頻度ランキングまでです。合計・平均などの統計やグラフ描画はありません(そこは本物の分析ツールの領分です)
  • 件数・時間は実測です
  • CLI関連の機能は今後も続けて追加予定です。次に取り込む機能は選定中です

使ったツール

UwView Pro は販売中です(Windows・macOS・Linux対応、1ライセンスで3OS。買い切りまたは月額、14日間の無料試用あり——編集機能も使えます)。多段階検索はPro機能です。

関連記事


開発者より: 私のアプリ・Kindle本・OSSの一覧は GitHub: amru195704 にあります。


ご注意
本記事の情報は参考情報として提供するものであり、正確性・完全性を保証するものではありません。すべての計測値は記載の特定環境におけるものであり、他のハードウェアでは異なる場合があります。誤りにお気づきの場合はコメントでお知らせください。確認のうえ訂正いたします。

タイトルとURLをコピーしました