我的cygwin中的diff版本有许多高级选项,允许我打印出每行的一个差异。
给定两个文件one.txt和two.txt。
one.txt:
one
two
three
four
five
six
two.txt
one
two2
three
four
five5
six
并在cygwin中运行diff,使用以下选项/参数:
diff -y --suppress-common-lines one.txt two.txt
给出的输出为:
two |two2
five |five5
这就是我所追求的格式类型,即每行打印出一个差异。在我的dev solaris盒子上,“-y”选项不受支持,所以我只能看到一个如下所示的输出:
2c2
< two
---
> two2
5c5
< five
---
> five5
有没有人知道一种方法,我可以得到一个输出的差异,每行这个solaris框?也许使用sed/awk一行程序来处理这个更原始的diff输出的输出?(请注意,我无法在这个solaris盒子上安装更新的diff版本)。
谢谢!
5条答案
按热度按时间omqzjyyz1#
使用GNU差异。
http://www.gnu.org/software/diffutils/
您可以构建并安装到您的本地目录,不是吗?如果你有一个主目录、一个编译器和一个make,你可以构建你自己的GNU diff。
我没有Solaris,但我无法想象它会比这更多:
无需root权限。
xggvc2p62#
comm -3
几乎可以实现您想要的功能,但需要排序的输入。它还将按照字母顺序将它们放在单独的行中。您的示例(排序后)将显示为如果solaris diff不能满足你的要求,那么标准solaris机器上的任何东西也不能满足你的要求,这意味着要从其他地方引入代码,不管是你自己的还是别人的。正如GNU diff所做的那样,你可以使用它。
bmp9r5qi3#
示例输出:
遗憾的是,它目前无法处理几个相同的配置变量...它计数它们,并将认为文件不同。
nx7onnlm4#
上面和下面给出的所有答案都是完美的,但是仅仅输入一个命令并得到一个结果并不能帮助你在将来解决类似的问题。
这里有一个链接解释了diff是如何工作的。一旦你通过了这个链接,你就可以自己解决问题了
这里有一个链接。https://www.youtube.com/watch?v=5_dyVrvbWjc
cuxqih215#