免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4059 | 回复: 15
打印 上一主题 下一主题

[文本处理] shell 找出2个文件里不同的内容? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-11 11:36 |只看该作者 |倒序浏览
有 A 、B 2个文档,A 550 帐号, B 480个帐号; 其中A 里的帐号是包含B文档里的帐号的。2个文档帐号都是乱序的,现在怎么能找出2个文档中不同的帐号,也就是找出a中b没有的?

分别使用  grep comm awk 怎么实现, 我试了 grep comm 没有成功。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-08-11 11:46 |只看该作者
本帖最后由 MMMIX 于 2015-08-11 12:31 编辑

回复 1# ppjer


    grep -vf B A

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
3 [报告]
发表于 2015-08-11 12:29 |只看该作者
回复 1# ppjer
  1. awk 'FNR==NR{a[$0];next}!($0 in a)' b a
  2. grep -vFf b a
复制代码

论坛徽章:
0
4 [报告]
发表于 2015-08-11 13:43 |只看该作者
回复 2# MMMIX

大牛回答问题,真是荣幸,给了我很大的动力。

论坛徽章:
0
5 [报告]
发表于 2015-08-11 13:59 |只看该作者
回复 3# songyc_2015

AWK 神器。
awk 'FNR==NR{a[$0];next}!($0 in a)' B A
有2点不明白:
1)FNR==NR ,FNR:当前文件中的记录号;NR:到目前为止记录数 为什么要写成 FNR==NR, 是做为条件吗?
2)还有next 函数,满足条件后,读入一下行并从开头执行脚本,这个不解?为什么要使用next?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
6 [报告]
发表于 2015-08-11 14:02 |只看该作者
  1. grep -vxFf a b
复制代码
  1. grep -vxFf b a
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
7 [报告]
发表于 2015-08-11 14:03 |只看该作者
回复 5# ppjer


满足 FNR==NR 的情况下:处理第一个文件
不满足 FNR==NR 的情况下:处理第二个文件

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
8 [报告]
发表于 2015-08-11 14:09 |只看该作者
1)FNR==NR ,FNR:当前文件中的记录号;NR:到目前为止记录数 为什么要写成 FNR==NR, 是做为条件吗?
  1. [unar@localhost ~]$ awk '{print "FNR = "FNR " but NR = "NR}' 1 2
  2. FNR = 1 but NR = 1
  3. FNR = 2 but NR = 2
  4. FNR = 3 but NR = 3
  5. FNR = 1 but NR = 4
  6. FNR = 2 but NR = 5
  7. FNR = 3 but NR = 6
复制代码
可以看到多个文件,FNR是个算各的。NR是累计的。所以NR==FNR可以用作判断是不是第一个文件

2)还有next 函数,满足条件后,读入一下行并从开头执行脚本,这个不解?为什么要使用next?
你的理解是对的,我感觉加不加都一样。可能是我们漏考虑了什么特殊情况吧

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2015-08-11 14:28 |只看该作者
回复 8# tuyajie


    next的目的是FNR==NR成立的情况下不去执行右边的代码

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
10 [报告]
发表于 2015-08-11 14:30 |只看该作者
我猜是这样的。但是我试了去掉也是可以的,所以就不理解了回复 9# Shell_HAT
  1. [unar@localhost ~]$ cat 1
  2. a
  3. b
  4. c
  5. [unar@localhost ~]$ cat 2
  6. b
  7. d
  8. a
  9. [unar@localhost ~]$ awk 'FNR==NR{a[$0]}!($0 in a)' 1 2
  10. d
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP