2010-11-09 70 views
0

我的cygwin中的diff版本有许多高级选项,这些选项允许我在每行中打印出一个差异。unix - 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一个班轮来从这个更原始的差异输出按摩输出? (请注意,我无法在此solaris框上安装更新的diff版本)。

谢谢!

回答

2

使用GNU diff。

http://www.gnu.org/software/diffutils/

你可以建立并安装到本地目录,不是吗?如果你有一个主目录,一个编译器和一个make,你可以构建你自己的GNU diff。

我没有的Solaris,但我无法想象它会比这更:

./configure --prefix=/home/bob 
make 
make install 

无需root权限。

+0

谢谢安迪,听起来不错。我没有在solaris上提供,但是我已经将它传递给我的系统管理员来为我构建。将看到它是如何去。 – Ben 2010-11-09 20:39:41

+0

Solaris盒上没有开发工具吗?这很难想象。你确定你知道它应该在哪里?你是否在/ usr/ucb中查看make和cc? – 2010-11-09 23:29:36

+0

'/ usr/ucb'和'/ usr/sfw'主要有完整的Solaris 10安装工具...(''gmake'而不是'make'等,尽管...) – 2017-08-28 12:16:21

1

comm -3几乎做你想要的,但需要排序输入。它也会按字母顺序将它们放在不同的行中。你的榜样(一次排序)会显示为

five 
     five5 
two 
     two2 

如果你想要什么,solaris的DIFF也不会做那么没有一个标准的Solaris系统是容易这样做要么,这意味着从其他地方引进的代码,无论是你自己或别人的。由于GNU diff可以做你想做的,只需使用它即可。

2

上面和下面给出的所有答案都是完美的,但只是输入一个命令,并得到一个结果将不会帮助你在将来解决类似的问题。

这里有一个链接,它解释了diff是如何工作的。一旦你通过链接,你可以自己的问题

这是一个链接。https://www.youtube.com/watch?v=5_dyVrvbWjc

0
#! /bin/bash 

FILES="[email protected]" 

COLUMN=1 

for variable in $(awk -F: '{print $X}' X=${COLUMN} ${FILES} | sort -u) ; do 
     NUM_CONFIGS=$(for file in ${FILES} ; do 
       grep "^${variable}" ${file} 
     done | sort -u | wc -l) 
     if [ "${NUM_CONFIGS}" -ne 1 ] ; then 
       for file in ${FILES} ; do 
         echo ${file}:$(grep "^${variable}" ${file}) 
       done 
       echo 
     fi 
done 
1

输出示例:

# ~/config_diff.sh postfix_DIST/master.cf postfix/master.cf 
postfix_DIST/master.cf: -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_tls_wrappermode=yes -o smtp_fallback_relay= 
postfix/master.cf: -o cleanup_service_name=cleanup_sasl -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o cleanup_service_name=cleanup_sasl -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtp_fallback_relay= 

postfix_DIST/master.cf:smtp inet n - - - - smtpd smtp unix - - - - - smtp 
postfix/master.cf:smtp inet n - - - - smtpd smtp unix - - - - - smtp 

可悲的是,目前还不能处理几个相同的配置变量...它计算他们会认为这些文件是不同的。

+0

我使它与双工配置行...由“cksum” – Thomas 2016-03-08 20:59:11