たとえば、テキストファイルがあり、各行は長い文字列です。この文字列の2つの「セグメント」、たとえば列1〜7と20〜22を除外したいと思います。したがって、下の2行は一致します。
123456789012345678901234567890
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB
WinMergeに「IgnoreColumns」プラグインがあることは知っていますが、これを機能させたことはありません。この例では、名前をIgnoreColumns_1-7、20-22.dllに変更し、プラグインメニューで選択して、[Pre-Differ]を選択します。しかし、それは一度も機能しませんでした。
変更したくない巨大なファイルを比較します。私はsedなどと比較してそれらをストリーム編集することに反対していませんが、実際のファイルを変更したくないのです。データをより視覚的に表示したいと思っていたという理由だけで、sedをdiffにフィードすることをまだ選択していません。
以下はLinuxとCygwinで動作します。
vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)
Cygwinで何らかの理由で、Vimは編集の開始以降に各ファイルが変更されたことを確認し、「[O] K、(L)oadFile:」と尋ねます。毎回O
と入力するだけです。
省略された列は表示されませんが、視覚的に並べて比較しています。
それでもWinMergeの「IgnoreColumns」プラグインを機能させたい場合は...近くにいるようです。 2つのメモ:
たとえば、WinMergeのMergePlugins
サブフォルダで、IgnoreColumns.dll
をIgnoreColumns_1-7_20-22.dll
にコピーします(スペースを入れず、カンマの代わりに下線を使用します)。
そのDLLを配置した後、WinMergeを完全に終了し、再実行します。 (「プラグインのリロード」はPlug-ins
/List
プルダウンメニューを更新しますが、機能は更新しません。)
補足:3者間比較を含むWinMergeの「サポートされているが非公式」バージョン– 2.13.20.12 –をお勧めします。 非公式のWinMergeビルド に移動すると、下部に「3-waydiffでサポートされているバージョン」が表示されます。
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
私があなたの疑問を理解できれば、あなたはテキストファイルから特定の列を除外または選択しようとしています。それが本当なら、あなたは textpad アプリケーションでそれをすることができます。それをインストールしてテキストファイルを開き、テキストから特定の列を選択すると同時に「Alt」キーを押します。これらの列を選択すると、必要な列をそれぞれコピー、切り取り、または削除できます。