linux 文件比较 输出,比较文件输出不同的内容

linux 比较文件输出不同的内容

目前据我所了解的有如下几种方法,来比较两个文件的行,以输出他们的不同之处:

1) comm mission:

comm [-123] file1 file2 [> sfile]

NOTE: file1,file2 must be firstly sorted !

-1/2/3 means: -1 ----- rid the only retained contents in file1

-2 ----- rid the only retained contents in file2

-3 ----- rid the communal lines in both two files

正如,上面说的那样,comm命令运用的前提是针对两个sorted文件!

该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。

选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行;comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;comm - 123则什么也不显示。

2) grep mission:

grep -v -f file1 file2

/*注::此法在对比数字时候比较凑效果,文本对比不建议使用*/

3)   awk mission:

awk '{print NR,$0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}'

或者:

awk '{print $0}' file1 file2 |sort|uniq -u

4)    diff mission:

diff [-opt] file1 file2

(1.)grep -F YOURSTRING -R path

功能:用grep搜索文档中的字符串

[root@SOR_SYS hahah]# grep -F 0576 -R /root/zy/hahah

/root/zy/hahah/b:05766798607

/root/zy/hahah/b:05766798608

/root/zy/hahah/b:05766798609

/root/zy/hahah/a:05766798608

(2.)grep -v -f file1 file2

功能:输出文件2中的内容,但是剔除包含在文件1中的内容

下面我们来看一个应用:

[root@SOR_SYS hahah]# cat a

1

4

05766798608

05766798608

6

7

[root@SOR_SYS hahah]# cat b

05766798607

05766798608

05766798609

[root@SOR_SYS hahah]# grep -v -f b a |tee 222 | wc -l

4

[root@SOR_SYS hahah]# cat 222

1

4

6

7

PS:

tee语法:tee [-a] [-i] [File…]

作用:相当于echo加>的作用,将标准输入输出到标准输入的同时写入文件

-a:(add)不覆盖原来的内容,添加到文件的后面

-i:(ignore)没完成则不被打断

列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:

cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3

(3.)grep -F -f  file1 file2

功能:可以把文件2中存在文件1的行输出

但是我做了一个试验,如果文件1中没有重复的行,结果是对的!如果有重复的行,结果和没有重复的行是一样的!

我想达到的目的是 文件1放的是手机号的前7位,文件2放的是手机号前7位 和 所代表的省份,输出结果然后统计文件1每个省有多少个手机号码??

[root@SOR_SYS hahah]# cat file1

11111

22222

11111

22222

33333

44444

55555

[root@SOR_SYS hahah]# cat file2

11111 bj

22222 hb

33333 hn

44444 nm

55555 xm

66666 mk

[root@SOR_SYS hahah]# grep -F -f file1 file2

11111 bj

22222 hb

33333 hn

44444 nm

55555 xm

[root@SOR_SYS hahah]#

看来这个是无法实现了,file1中有2个11111和2个22222,即如果file1有重复的行,还重复输出。

[root@SOR_SYS hahah]# join -1 2 -2 1

11111 2 bj

22222 2 hb

33333 1 hn

44444 1 nm

55555 1 xm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值