Chinaunix

标题: AWK比较两个文件的不同数据 [打印本页]

作者: Ienovo_qq    时间: 2015-06-12 16:52
标题: AWK比较两个文件的不同数据
文件1 1340233
         1340234
         1350811
         1360811
文件2 1340233
         1350811
         1360811
文件2与文件1进行比较,缺失的数据为
       1340234
请大侠相助。
作者: Buring__    时间: 2015-06-12 16:54
  1. grep -Fvf file2 file1
  2. 1340234
复制代码

作者: Ienovo_qq    时间: 2015-06-12 17:03
回复 2# Buring__


    谢谢,请用awk.
作者: songyc_2015    时间: 2015-06-12 17:11
回复 1# Ienovo_qq
  1. awk 'FNR==NR{a[$0];next}!($0 in a)' file2 file1
  2. awk 'FNR==NR{a[$0]=1;next}!a[$0]' file2 file1
复制代码

作者: Ienovo_qq    时间: 2015-06-12 17:13
回复 4# songyc_2015


    谢谢!测试已OK.
作者: 小亮520cl    时间: 2015-06-12 17:14
本帖最后由 小亮520cl 于 2015-06-12 17:16 编辑



[root@gc1: /root/scripts]$ awk '{if(ARGIND==1) {val[$0]}else{if($0 in val)  delete val[$0]}}END{for(i in val) print i}' file1 file2
         1360811
作者: drakness    时间: 2015-06-12 17:48
  1. awk 'NR==FNR{a[$0]=1}{a[$0]?h=0:h=1}h' urfile2 urfile1
复制代码

作者: reyleon    时间: 2015-06-12 17:56
回复 7# drakness


    肉眼扫描了下, 你这个测试OK不?
作者: Herowinter    时间: 2015-06-12 17:57
回复 3# Ienovo_qq

没特殊原因的话grep效率好一点吧.
作者: Herowinter    时间: 2015-06-12 17:58
回复 8# reyleon


    少了个next?
作者: reyleon    时间: 2015-06-12 18:01
回复 10# Herowinter


    总感觉少了点东西
作者: drakness    时间: 2015-06-12 18:02
回复 8# reyleon


    我测试是没有问题的
作者: drakness    时间: 2015-06-12 18:04
回复 11# reyleon
  1. head a1 a2

  2. ==> a1 <==
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. 7
  10. 8
  11. 9

  12. ==> a2 <==
  13. 1
  14. 2
  15. 3
  16. 4
  17. 5
  18. 6
  19. 7
复制代码
测试
  1. awk 'NR==FNR{a[$0]=1}{a[$0]?h=0:h=1}h' a2 a1
  2. 8
  3. 9
复制代码

作者: Herowinter    时间: 2015-06-12 18:07
回复 13# drakness


    请运行 awk 'NR==FNR{a[$0]=1}{a[$0]?h=0:h=1}h' a1 a2
作者: drakness    时间: 2015-06-12 18:14
回复 14# Herowinter


    有什么意义?
文件顺序弄反你要表达什么?
作者: Herowinter    时间: 2015-06-12 18:25
回复 13# drakness


好吧,如果楼主的需求是找出文件1中存在, 但文件2中不存在的行,
这代码没问题;但如果是标题那样找不同的数据,这代码有bug.
   
   
作者: drakness    时间: 2015-06-12 18:32
回复 16# Herowinter


    先下班了,回头研究研究,看有没有更健壮的改法
作者: zl624867243    时间: 2015-06-12 19:00
  1. diff a b | tail -1 | awk '{print $2}'
复制代码

作者: Windows19    时间: 2015-06-12 19:54
都是高手     
作者: lichmama    时间: 2015-06-15 13:47
为什么不是diff
  1. $>diff a b
  2. 2d1
  3. < 1340234
  4. $>
复制代码

作者: yiranhendai    时间: 2015-06-17 14:05
awk 'FNR==NR{S[$1]=$0}FNR!=NR{if(!S[$1])print }' file2 file1
作者: fh21_xuejinlian    时间: 2016-08-31 18:10
awk 'NR==FNR{a[$1]=$1}!a[$1]{print $0}' file2 file1

作者: sunzhiguolu    时间: 2016-08-31 18:39
  1. perl -nle 'if(@ARGV){$h{$_}++;next}print if(!$h{$_})' b a
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2