1
yangg 2013-03-15 16:20:06 +08:00
如果没顺序就是
cat a.txt | while read line; do grep "$line" b.txt > /dev/null || echo $line; done 有顺序的话直接diff吧 |
2
yangg 2013-03-15 16:22:57 +08:00 1
修正下,整行相同,而不是匹配
cat a.txt | while read line; do grep "^$line$" b.txt > /dev/null || echo $line; done |
6
swulling 2013-03-15 16:55:58 +08:00 1
需求:找出文件a中哪些行是文件b中没有的
方案1: @yangg 的方法,没有对grep做任何参数限制,几千行对比就会很慢了。。而且为啥一长串? 正确方法是 cat a | grep -vFf b 如果不区分大小写,加-i参数即可 方案2: 如果数据量到达1000w以上,你会发现grep会把内存打满,无法使用 用awk即可 输出a和b的相同行 awk 'ARGIND==1{a[$0]} ARGIND>1&&($0 in a){print $0}' a b > same.out 输出文件a中哪些行是文件b中没有的 awk 'ARGIND==1{a[$0]} ARGIND>1&&!($0 in a){print $0}' a b > a-b.out |
7
swulling 2013-03-15 16:59:22 +08:00
P.S awk内存占用约等于文件a的行数*awk内置hash长度(64bit=8Byte?记不太清楚了)
性能大约是1000w的a和1000w的b对比,几分钟,而且时间和内存占用是和行数线性相关的 |