是否存在允许您排除列的差异实用程序?

是否存在允许您排除列的差异实用程序?

例如,我有一个文本文件,每行都是一个长字符串。我想排除此字符串的 2 个“段”,例如第 1-7 列和第 20-22 列。因此,下面最下面的两行将匹配:

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

我知道 WinMerge 有一个“IgnoreColumns”插件,但我从来没有用过它。在这个例子中,我将其重命名为 IgnoreColumns_1-7, 20-22.dll,在插件菜单中选择它,然后选择“Pre-Differ”。但它从来没有起作用。

我将比较那些我不想修改的大型文件。我并不反对在比较过程中使用 sed 或类似程序对它们进行流式编辑,但我更希望不要修改实际文件。我还没有选择将 sed 提供给 diff,只是因为我希望获得更直观的数据视图。

答案1

以下内容适用于 Linux 和 Cygwin。

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

由于某种原因,在 Cygwin 上,Vim 会提示每个文件自编辑开始以来都发生了变化,并询问“[O]K, (L)oad File:”。O每次只需输入即可。

当然,您看不到省略的列,但这是一个视觉的并排比较。

答案2

如果您仍想让 WinMerge“IgnoreColumns”插件正常工作……看起来您已经很接近成功了。请注意以下两点:

  1. 例如,在 WinMerge 的MergePlugins子文件夹中,复制IgnoreColumns.dllIgnoreColumns_1-7_20-22.dll(没有空格,使用下划线代替逗号)。

  2. 放置该 DLL 后,完全退出 WinMerge,然后重新运行它。(“重新加载插件”将更新Plug-ins/List下拉菜单,但不会更新功能。)

附注:我推荐使用“受支持但非官方”的 WinMerge 版本 - 2.13.20.12 - 其中包含三向比较。转到非官方 WinMerge 版本,在底部你会看到“3-way diff 支持的版本”。

答案3

正如 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

答案4

如果我理解你的疑问,你正在尝试从文本文件中排除或选择特定列。如果是真的,你可以用文本板应用程序。安装并打开文本文件,然后在从文本中选择特定列的同时按下“Alt”键。选择这些列后,您可以复制、剪切或删除所需的每个列。

相关内容