grep・uniq -c・sed を、GUIに — CLIコマンド → UwView Pro 対応表

技術解説

CLIコマンドとUwView Proの操作の対応表。grepの-i/-E/-w/-vは多段階検索の4チェック、sort|uniq -c|sort -rnは集計、sedの全置換はEdit Upgrade、>保存はヒット行の書き出しに対応。awkの算術とtail -fは非搭載であることも明記”></p>
<h1 id=grep・uniq -c・sed を、GUIに — CLIコマンド → UwView Pro 対応表

50GBを超えたあたりから、比較対象のGUIアプリがほぼ見当たらなくなりました。PilotEditとlnavの追試でもそれを確かめたので、いま実際に競っている相手は CLIツールです。

そこでここ数回、grepの機能をひとつずつGUIに載せてきました。-v(含まない)-w(単語一致)uniq -c(頻度集計)。v1.5.0 でそれらが出そろったので、いま何が対応していて、何が対応していないのかを1枚の表にまとめます。

先に結論を書くと、いま名乗れるのは grep・uniq -c・sed の3つです。awk は名乗れません(後述)。

対応表 — 動作が近いCLIコマンド

これは厳密な等価ではなく、「動作が近い例」です。多段階検索は±N行の文脈ブロック単位で絞り込むのに対し、grepのパイプは行のストリームを流すので、端のケースでは結果が違います。

探す

CLI UwView Pro
grep PATTERN big.log 検索(1段目)
grep -i 「大小無視」チェック
grep -E 「Regex」チェック
grep -w 「単語一致」チェック
grep -v 「含まない」チェック(2段目以降)
grep -C N 前後±N行の文脈表示
grep A \| grep B \| grep C 多段階検索(最大8段。各段は件数付きタブとして残り、いつでも戻れる)
wc -l 総行数(開いた時点でステータスバーに表示)

数える

CLI UwView Pro
... \| sort \| uniq -c \| sort -rn 「集計」(正規表現の第1キャプチャ群で頻度ランキング)
... \| head -20 上位N(既定20・変更可)
(集計結果から原文へ戻る) ランキングの行をクリック → その値で次の段へ降下

直す・残す

CLI UwView Pro
sed -i 's/A/B/g' 全置換(Edit Upgrade。原本は書き換えず差分ファイル .ewvz に積む)
grep ... > hits.txt ヒット行の保存(行番号・1行目をヘッダーに・前後±N行)
zgrep PATTERN log.gz .uwvz展開せずにそのまま検索
gzip で保管 .uwvz アーカイブ(約1/9・チェックサム付き・開いて検索できる)

実測値(すべて同じ48GBファイル・892,239,125行)

表だけだと速度の話が抜けるので、これまでの記事で出した実測値を並べます。

操作 実測
全文検索 初回54.7秒(索引作成と同時)/2回目以降14秒。参考: grep 64.64秒・ripgrep 71.49秒(毎回)
多段階検索 -v 3段 Tokyo 10,967件 → 医療を除外 10,949 → 消防を除外 10,928 → 横浜 16件
単語一致 -w Tokyo 10,967件 → 単語一致の Ariake で7件
集計 10,967件のヒットを31ミリ秒で159種類にランキング(走査は10,967行)。48GBの139万ヒットでも61.5秒
全置換 置換2回で47.0秒
保存 途中終了は0秒(差分が既にある)/最終テキストの出力は1〜2分

この表を、CLIと丸ごと突き合わせました

上は個々の操作の値です。この対応表のとおりの仕事を、258GB・45億行のファイルでCLIとUwView Proに1本ずつ通してみた実測を別記事にまとめました。

258GB・45億行に、5つの質問をする — grepとGUI、どこで逆転するか

5問の検索・絞り込み4段・集計・全置換・保存を通しで測ると、CLI 51分17秒 対 UwView Pro 12分29秒.uwvz で締める場合。テキストで書き出すなら15分35秒)。ただし質問が1つだけなら ripgrep のほうが速く、逆転するのは2問目からです。ヒット数・置換箇所・出力バイト数まで6項目を照合して一致を確認しています。

対応していないもの(こちらのほうが大事です)

CLI UwView Pro
awk '{s+=$3} END{print s}'(合計・平均などの算術) ありません。集計でできるのは頻度ランキングまでです
tail -f(追記の追尾) Pro にはありません。無料版 UwView の側にあります
cut / paste / join などの列操作 ありません(矩形選択でのコピーはあります)
パイプ・リダイレクト・スクリプト ありません。自動化・定期実行はCLIの領分のままです

awkを名乗れないのは、awkの本体がフィールド分割($1 $3)・算術・条件・BEGIN/END・printfだからです。UwView Pro の集計は正規表現キャプチャで値を切り出して数えるところまでで、系譜としては grep -oE | sort | uniq -c の側にあります。ここを曖昧にすると「合計が出せると思った」という落胆になるので、はっきり書いておきます。

で、いつCLIを使い、いつGUIを使うのか

線引きはずっと同じです。

CLIが正解の場面 — 1回きりの検索。スクリプトに組み込む処理。cronで定期実行するもの。パイプで他のツールへ渡すもの。ここは grep・sed・awk が最善で、GUIが勝てる要素はありません。

GUIが効く場面 — 何を捨てればいいかがまだ分かっていない調査。同じファイルに何度も違う質問を投げる作業。48GBのファイルで質問のたびに全走査すると、1回64秒が積み上がっていきます。索引を1度作れば2回目以降が14秒になり、絞り込んだ各段がタブとして残るので、行きつ戻りつしながら考えられます。

この「何問目から得になるか」は、258GBでの実測で数字にしました。索引317.8秒・1問32.38秒に対しCLI(ripgrep)が1問277.91秒なので、交差点は 1.29問目——つまり2問目からです。

CLI関連の機能はこれからも追加していく予定です。次に取り込むものは選定中です。

使ったツール

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

関連記事


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


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

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