この資料は Rust 製のコマンドラインツール runiq について紹介するものです。
Rustの環境構築やツールのインストール方法については以下を参照してください
クレートライブラリ runiq-lib のCLIツール。ライブラリとしてプログラムからも呼び出すこともできます。runiq は、速度とメモリの両方に最適化されていて、テキスト入力から重複する項目(行)をフィルタリングする効率的な方法(処理時間とメモリ使用量の両方)を提供します。データや、速度とメモリ使用量の間のトレードオフに応じて、いくつかのフィルタリングオプションがサポートされています。
GitHub - whitfin/runiq: An efficient way to filter duplicate lines from input, à la uniq.
runiqのデフォルトのフィルタリング機構は、一意性を判断するためにハッシュを使用するため、一意なエントリーを表すための単一のusizeしか保存しないので、ほとんどメモリを必要としません。これは、他の類似のツールがエントリそのものを保存し、メモリが大幅に増加するのとは対照的なものです。xxhash64アルゴリズムはハッシュを生成するために使用され、十分に高速でありながら衝突に強い(これがデフォルトにすることが安全である理由)。
衝突は可能性に関係なく、理論的には当然起こりうることです。もし比較に生の値を使いたいのであれば、オプション-f
native
を指定してこれをオンにすることができます。これは単純なフィルタリング機構を使用してハッシュをスキップし、代わりに生の値を保存するようになります。これはメモリを増加させますが、uq や sort | uniq
によるフィルタリングに近い動作になります。
将来的には要求される精度に応じて他のフィルタも追加する予定ですが、 執筆時点では naive
, digest
, bloom
, sorted
が利用可能で、 digest
がデフォルトになっています。
runiq [OPTIONS] <inputs>...
-h
, --help
ヘルプ情報を表示する-V
, --version
バージョン情報を表示する-i
, --invert
ユニークではなく、重複を印刷する-s
, --statistics
エントリの代わりに統計情報を出力する-f
, --filter
<filter>
一意性の判断に使用するフィルター
naive
, digest
, bloom
, sorted
デフォルトは digest