linux比较两个文本文件并输出

linux比较两个文本文件并输出,第1张

diff -u a.txt b.txt|grep '^-' |grep -v '^---' > '_1_not_in_2.txt'

diff -u a.txt b.txt|grep '^+' |grep -v '^+++' > '_2_not_in_1.txt'

diff -u a.txt b.txt|grep '^ ' > same.txt

这是区别出三个文件的命令,把上面的命令运用到脚本里面就可以高效使用了。

脚本:

[root@bogon diff]# sh diff.sh

Please input a name for file1 :file1

Please input a name for file2 :file2

你算问对人咯。使用linux的comm

如果是WIN下的文件,注意先转换换行符号!!!

先对文件进行排序去重复:sort filename1 |uniq>filename1-sorted

然后对第2个文件也排序去重复并管道使用comm 找出符合你要求的:

共同拥有的行:sort filename2|uniq|comm -12 - filename1-sorted>共同拥有的

文件 filename1-sorted独有的: sort filename2|uniq|comm -13 - filename1-sorted>filename1-sorted独有

文件 filename2独有的: sort filename2|uniq|comm -23 - filename1-sorted>filename2独有。

赶紧给分,哈哈!

用comm相对比较简单,也可以用 awk做:

共同拥有的:

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]!="") print $0}' file1 file2>共同拥有

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]=="") print $0}' file1 file2>file2独有

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]=="") print $0}' file2 file1>file1独有

直接使用输出重定向到你想要的文件即可,不过将所有的控制到信息输出到一个文本文件,只有两个办法:

①:修改所有程序的输出路径:printf函数 echo.....几乎是不可能完成的任务

②:修改linux的标准输出路径:

句柄 句柄的数字代号 描述

STDIN 0 键盘输入

STDOUT1 输出到命令提示符窗口

STDERR2 错误输出到命令提示符窗口

将标准输出 标准输出的默认设置更改为你要保存的文件,这样就会控制台的信息就会输出到你指定的文件里面


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8938232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存