显示文件A, B中共有的行, A有B无或A无B有的行

来源:互联网 发布:华泰软件工程有限公司 编辑:程序博客网 时间:2024/05/21 00:48
假设文件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 结果将是
c
3. 显示A无B有的行
与2中类似, 
grep -vx -f 
结果将是
d
x
grep的-f 所能处理的正则表达式有多大? 文件中的内容可以是无限制的吗?
从实际操作上看, 不是! 当A的内容有11014行时, 我的测试表明:
在grep能输出第一行内容之前, 它要花大量的时间构造内部的正则表达式.
开始输出匹配行之后, 每输出一个匹配行, 也要花费不少时间, 至少是1秒.
所以, 这并不是一个对大量数据处理仍然友好的方案, 但, 对于小量数据. -f 文件小于1000行的情形, 仍然能工作得相当不错.
原创粉丝点击