UwView シリーズ — 探す UwView・比べる UwDiff
2つのファイル・フォルダを比べるのは UwDiff、巨大なファイルを開いて探すのは UwView。どちらも Windows・macOS・Linux で動きます。→ UwView の概要
UwDiff — 2つのファイル・2つのフォルダを比べる
ログでも CSV でも Excel でも PDF でも。Shift-JIS でも UTF-16 でも。1本 10GB でも、1万本のフォルダでも。
UwDiff は、2つのファイル(または2つのフォルダ)を比べて、どこが違うかを出す道具です。画面(UwDiff)と CLI(uvd)を同梱し、どちらも同じ比べ方をします。Windows・macOS・Linux で動きます。
UwView で探して、UwDiff で比べる。 巨大なファイルを開いて探すのは UwView、2つを比べるのは UwDiff です。UwDiff は UwView の一部ではなく、別の製品です。
GitHub のリポジトリ(ソース・説明・問い合わせ)
[ダウンロード] [操作マニュアル] [実測の一覧]
6つの軸
| 軸 | できること |
|---|---|
| 形式 | テキスト(ログ・CSV・TSV・ソース)/圧縮 7 形式(gz・bz2・xz・lzma・zst・lz4・br)の中身/Word(.docx)・Excel(.xlsx)・PDF の文字 |
| 文字コード | UTF-8・Shift-JIS(CP932)・EUC-JP・UTF-16(BOM あり・なし)を自動で見分ける。旧と新で違ってもよい |
| CLI と画面 | CLI uvd で比べ、-open を付けると結果がそのまま画面に出る(画面はもう一度比べない) |
| 3OS | macOS(Apple Silicon・Intel)・Linux(x86_64・aarch64)・Windows(x64・ARM64)。.NET を別に入れる必要はない |
| 多数・巨大 | 1本 10GB 級のファイル、数千〜数万本のフォルダ。メモリを超えても一時ファイルへ逃がして止まらない |
| 速さ | CSV 10GB × 2 本のキー照合が約 21〜23 秒、テキスト 10GB × 2 本が約 21 秒(下の「速さ」に条件) |
比べ方は4つ
- テキスト: 行の並びを保って比べ、
diff -uと同じ形(unified diff)で出す。出した差分をpatchで旧に当てると新になる。 - 表(キー照合): CSV・TSV・Excel を、点名や ID などのキー列で照合する。行の順番が違ってもよい。変わったセルごとに 1 行で出す。
- 順番を問わない比較: 行の順番を見ずに、どの行が増えた・減ったかだけを数える。
- フォルダ対フォルダ: 下の階層まで、旧だけ・新だけ・違う・同じを一覧にする。違うファイルは 1 組ずつ中身も比べられる。
表の差分から採る変更だけを選んで反映することもできます。旧のファイルの文字コード・区切り・改行・引用符・行の順番を保ったまま、新しいファイルを書きます(元のファイルは変えません)。
速さ(実測・条件つき)
先に負けと限界を書きます。
- テキストで、ほぼ全行が違う最悪の組(10GB × 2 本・4,096 行ごとに並べ替えた新)は 110 秒かかります(行の並びがそろった組は 20.7 秒)。
- 行の順番がばらばらの巨大な表は、相手を待つ行が増えてメモリを使います(10GB × 2 本で 11.1〜11.5GiB)。メモリの上限を 476MB にして一時ファイルへ逃がすと、止まらずに済みますが 58〜60 秒かかります。
- 1 か所で数百万行が入れ替わるような所は、その範囲を「置き換え」として出すことがあります(正しい差分ですが、最小とは限りません)。
- Word・Excel・PDF は取り出した文字の比較です(書式・図・数式は比べません)。古い .doc・.xls、パスワード付き、文字の無い PDF は読めません。
| 比べるもの(2 本とも同じ大きさ) | 時間(秒) | メモリ |
|---|---|---|
| CSV 10GB × 2 本・キー照合・行順そろい(UTF-8/CP932) | 21.8/20.5 | 4.0〜4.3GiB |
| CSV 10GB × 2 本・キー照合・行順ばらばら(UTF-8/CP932) | 23.3/22.3 | 11.1〜11.5GiB |
| テキスト 10GB × 2 本・行の並びを保つ比較 | 20.7 | 0.4GiB |
| 画面: テキスト 10GB × 2 本、「比べる」から画面に出るまで | 20.5 | — |
| フォルダ 1 万本(片側 2.2GB・約 1% が違う) | 3.1(キャッシュに載った状態) | — |
条件: Mac mini(Apple M4・10コア・メモリ 32GB)・macOS・データは外付け SSD/uvd 1.0.0/tools/run_tests.sh と同じ試験データ(CSV 10GB は 10,534 万行)。秒は /usr/bin/time の real。キャッシュを消していない値(データを作った直後に続けて実行。10GB × 2 本はメモリに収まらないので cold に近い)。どれも結果が正解と完全に一致することを確かめたうえでの時間です。出どころ: UwDiff の実測(docs/benchmarks.md)。
CLI の例
uvd 旧.log 新.log -o 差分.diff # テキスト(diff -u と同じ形)
uvd 旧.log.gz 新.log.gz -open # 圧縮のまま比べ、結果を画面で開く
uvd 旧.csv 新.csv -key 点名 -o 差分.csv # 表をキーで照合
uvd 台帳_9月.xlsx 台帳_10月.xlsx -key 点名 # Excel のシートごと
uvd 納品_前回/ 納品_今回/ -o 一覧.csv # フォルダ対フォルダ
uvd apply 旧.csv 新.csv 採る差分.csv -o 結果.csv # 採った変更だけを旧に反映
終了コードは diff と同じです(0 = 同じ・1 = 違いあり・2 = エラー)。
入手
いまの版は v1.0.0「First Light」です。配布物(mac は .dmg、Linux は .tar.gz、Windows は .zip)は GitHub Releases と、このサイトのダウンロードのページ(SHA256 も載せています)から取れます。ソースから作る手順(.NET 10 SDK)は GitHub の UwDiff リポジトリにあります。
ライセンス
UwDiff は UwDiff License(PolyForm Internal Use 1.0.0 + 公式バイナリのパッケージ再配布の許可。日本語の参考訳)で提供しています。
- 個人利用、および企業の社内業務利用は無料です。
- 再配布・製品/サービスへの組込み・転売・第三者への提供はできません。これらには別途「商用(再配布)ライセンス」が要ります。
- ただし、公式バイナリを無改変のまま、無償でパッケージとして再配布することはできます(Flathub・Snap・AUR・Linux ディストリビューションのリポジトリ・Homebrew・Scoop・winget など)。条件は LICENSE の「Additional Permission」にあります。
- UwDiff はオープンソースソフトウェアではありません。
- 問い合わせは GitHub Issues へ。
姉妹ツール
- UwView(探す・開く。CLI
uvf): 巨大なテキストを開いた瞬間から読み、探す道具です → UwView とは - UwDiff(比べる。CLI
uvd): このページ
開発者より: アプリ・Kindle本・公開プロジェクトの一覧は GitHub: amru195704 にまとめています。