Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315269
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: LINUX

2007-03-28 18:21:41

假设文件A的内容为

a
b
c
文件B的内容为

a
b
d
x

1. 显示A和B共有的行

1.1 以文件A的内容为pattern, 搜索文件A和B中哪些行匹配

grep -x -f A B A


结果为
B:a
B:b
A:a
A:b
A:c

1.2 按行的内容排序, 使得内容相同的行显示在一起:

grep -x -f A B A | sort -t: -k2


结果为
A:a
B:a
A:b
B:b
A:c

1.3 显示连续两行行的内容相同的结果, 这些结果将是A, B文件共有的内容:

grep -x -f A B A | sort -t: -k2 | grep -P '([^:]*)\n.*:\1$'

结果为
A:a
B:a
A:b
B:b

1.4 把文件信息过滤掉, 只显示行的内容:

grep -x -f A B A | sort -t: -k2 | grep -P '([^:]*)\n.*:\1$'| sed 's#.*:##g' | uniq


结果为
a
b

2. 显示A有B无的行

以1中的结果为出发点. 只需显示A文件中那些与1中的结果都不匹配的行.

grep -vx -f <(cmd_1) a

结果将是
c

3. 显示A无B有的行

与2中类似,

grep -vx -f <(cmd_1) b


结果将是
d
x

grep的-f 所能处理的正则表达式有多大? 文件中的内容可以是无限制的吗?
从实际操作上看, 不是! 当A的内容有11014行时, 我的测试表明:
在grep能输出第一行内容之前, 它要花大量的时间构造内部的正则表达式.
开始输出匹配行之后, 每输出一个匹配行, 也要花费不少时间, 至少是1秒.

所以, 这并不是一个对大量数据处理仍然友好的方案, 但, 对于小量数据. -f 文件小于1000行的情形, 仍然能工作得相当不错.
阅读(1089) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~