web-dev-qa-db-ja.com

列を除外できるdiffユーティリティはありますか?

たとえば、テキストファイルがあり、各行は長い文字列です。この文字列の2つの「セグメント」、たとえば列1〜7と20〜22を除外したいと思います。したがって、下の2行は一致します。

123456789012345678901234567890 
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB

WinMergeに「IgnoreColumns」プラグインがあることは知っていますが、これを機能させたことはありません。この例では、名前をIgnoreColumns_1-7、20-22.dllに変更し、プラグインメニューで選択して、[Pre-Differ]を選択します。しかし、それは一度も機能しませんでした。

変更したくない巨大なファイルを比較します。私はsedなどと比較してそれらをストリーム編集することに反対していませんが、実際のファイルを変更したくないのです。データをより視覚的に表示したいと思っていたという理由だけで、sedをdiffにフィードすることをまだ選択していません。

6
user39160

以下はLinuxとCygwinで動作します。

vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)

Cygwinで何らかの理由で、Vimは編集の開始以降に各ファイルが変更されたことを確認し、「[O] K、(L)oadFile:」と尋ねます。毎回Oと入力するだけです。

省略された列は表示されませんが、視覚的に並べて比較しています。

4
garyjohn

それでもWinMergeの「IgnoreColumns」プラグインを機能させたい場合は...近くにいるようです。 2つのメモ:

  1. たとえば、WinMergeのMergePluginsサブフォルダで、IgnoreColumns.dllIgnoreColumns_1-7_20-22.dllにコピーします(スペースを入れず、カンマの代わりに下線を使用します)。

  2. そのDLLを配置した後、WinMergeを完全に終了し、再実行します。 (「プラグインのリロード」はPlug-ins/Listプルダウンメニューを更新しますが、機能は更新しません。)

補足:3者間比較を含むWinMergeの「サポートされているが非公式」バージョン– 2.13.20.12 –をお勧めします。 非公式のWinMergeビルド に移動すると、下部に「3-waydiffでサポートされているバージョン」が表示されます。

3
Doug_Ivison

Diogo_Rochaの答えと同じように、事前にファイルを変更して、テストしたくない列を削除してから、diffを実行することができます。しかし、コマンドラインのものだけで。

したがって、あなたの例では、「列」1〜7および20〜22を削除できます。

sed 's/.\{7\}\(.\{12\}\).\{3\}\(.*\)/\1\2/' test.txt > test2.txt
diff -u test2.txt whatnot.txt

編集: garyjohnのより良い答えの露骨な泥棒化。

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less
1
Nicholi

私があなたの疑問を理解できれば、あなたはテキストファイルから特定の列を除外または選択しようとしています。それが本当なら、あなたは textpad アプリケーションでそれをすることができます。それをインストールしてテキストファイルを開き、テキストから特定の列を選択すると同時に「Alt」キーを押します。これらの列を選択すると、必要な列をそれぞれコピー、切り取り、または削除できます。

0
Diogo