免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何获取新文件与旧文件不同的部分的内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-22 10:04 |只看该作者 |倒序浏览
有两个文件,文件的结构是一样的,现在想获取第二个文件不同于第一个文件的所有行。
感觉可以有awk,但是不知道怎么写,还请大虾指点。
文件的第一个字段是唯一id,但会有新记录产生,也会有老id的其他值的有变化,所以不能用diff,
现在要取出的是第二个文件里相对第一个文件里新增的记录和有过修改的记录。

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
2 [报告]
发表于 2013-05-22 10:08 |只看该作者
回复 1# _rayzhang


    把要处理的文本贴出来吧,等等写完你说这不是你要的,岂不是都是在浪费各自的时间

论坛徽章:
0
3 [报告]
发表于 2013-05-22 10:25 |只看该作者
老文件
1010777|kk111|kk111|Kathya|worth|kk111@test.com| ||9802|920/700-9587| | | |ALM
1010888|kl233|kl233|Kent|man|kl233@test.com| ||6454|900/333-2980| | | |ALM

新文件
1010888|kl233|kl233|Kent|man2|Kentman2@test.com| ||6454|900/332-2980| | | |ALM
1010777|kk111|kk111|Kathya|worth|kk111@test.com| ||9802|920/700-9587| | | |ALM
1010899|cl23|cl23|Carl|Liam|Liam@test.com| ||7777|940/323-4980| | | |ALM


要输出的是新文件的
1010888|kl233|kl233|Kent|man2|Kentman2@test.com| ||6454|900/332-2980| | | |ALM
1010899|cl23|cl23|Carl|Liam|Liam@test.com| ||7777|940/323-4980| | | |ALM
因为1010888记录有过修改,1010899是条新记录

论坛徽章:
0
4 [报告]
发表于 2013-05-22 10:31 |只看该作者
新文件 跟 老文件的内容顺序是不一样的?

论坛徽章:
0
5 [报告]
发表于 2013-05-22 10:40 |只看该作者
回复 3# _rayzhang
  1. awk 'NR==FNR{a[$0]=1;next}!a[$0]{print}' 老文件  新文件
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-05-22 10:40 |只看该作者
本帖最后由 ljwd1000 于 2013-05-22 10:42 编辑
  1. awk 'NR==FNR{a[$0];next}!($0 in a)' oldfile newfile
复制代码
是这样么

论坛徽章:
15
CU大牛徽章
日期:2013-03-13 15:32:35白羊座
日期:2013-10-30 13:11:16未羊
日期:2013-11-29 10:47:02白羊座
日期:2014-01-22 11:34:25白羊座
日期:2014-03-04 11:05:50申猴
日期:2014-07-29 16:31:36天秤座
日期:2013-10-23 15:33:47未羊
日期:2013-10-09 09:18:53CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55未羊
日期:2013-09-23 09:29:22
7 [报告]
发表于 2013-05-22 10:43 |只看该作者
diff 不可以吗?

论坛徽章:
0
8 [报告]
发表于 2013-05-22 11:06 |只看该作者
diff就是因为必须顺序相同把,但即使排序了也不行,排序后也未必相同id在两个文件里位于同一行。我先试试5楼和6楼的方法,谢谢大家

论坛徽章:
0
9 [报告]
发表于 2013-05-22 11:07 |只看该作者
试过了可以,不过6楼的比5楼的运行快些

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
10 [报告]
发表于 2013-05-22 15:51 |只看该作者
回复 8# _rayzhang


    排序后不在同一行没关系吧,只要id是顺序下来的,不在同一行的话,就说明中间有删除行,不是吗。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP