*grep -F/f的作用*

(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

[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

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 <(sort file1|uniq -c) <(sort file2)
11111 2 bj
22222 2 hb
33333 1 hn
44444 1 nm
55555 1 xm


你可能感兴趣的:(点点滴滴)