はじめに

この資料は Rust 製のコマンドラインツール runiq について紹介するものです。

Rustの環境構築やツールのインストール方法については以下を参照してください

Rust開発環境を整える

runiq について

クレートライブラリ runiq-lib のCLIツール。ライブラリとしてプログラムからも呼び出すこともできます。runiq は、速度とメモリの両方に最適化されていて、テキスト入力から重複する項目(行)をフィルタリングする効率的な方法(処理時間とメモリ使用量の両方)を提供します。データや、速度とメモリ使用量の間のトレードオフに応じて、いくつかのフィルタリングオプションがサポートされています。

GitHub - whitfin/runiq: An efficient way to filter duplicate lines from input, à la uniq.

設計と推論

runiqのデフォルトのフィルタリング機構は、一意性を判断するためにハッシュを使用するため、一意なエントリーを表すための単一のusizeしか保存しないので、ほとんどメモリを必要としません。これは、他の類似のツールがエントリそのものを保存し、メモリが大幅に増加するのとは対照的なものです。xxhash64アルゴリズムはハッシュを生成するために使用され、十分に高速でありながら衝突に強い(これがデフォルトにすることが安全である理由)。

衝突は可能性に関係なく、理論的には当然起こりうることです。もし比較に生の値を使いたいのであれば、オプション-f native を指定してこれをオンにすることができます。これは単純なフィルタリング機構を使用してハッシュをスキップし、代わりに生の値を保存するようになります。これはメモリを増加させますが、uqsort | uniq によるフィルタリングに近い動作になります。

将来的には要求される精度に応じて他のフィルタも追加する予定ですが、 執筆時点では naive, digest, bloom, sorted が利用可能で、 digest がデフォルトになっています。

使用方法

runiq [OPTIONS] <inputs>...

オプション

引数