免费注册 查看新帖 |

Chinaunix

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

[学习] 求一个文件内容比较脚本(按指定列进行比较) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-27 15:44 |只看该作者 |倒序浏览
5可用积分
本帖最后由 helpid 于 2012-11-27 15:44 编辑

求一个文件内容比较脚本(按指定列进行比较)
awk、sed、perl、bash shell 都可以

本来想用hashmap来做,但是查了下好像shell没有相关信息

以下面fileA 、fileB 两个文件为例:
只比较列1、列2; 列3忽略不做比较
文件记录数不一样;
列分割符为"|";

A. 当fileA与fileB当前行的列2不相同时:
   1. 把fileA中的当前行记录写入diffA
   2. 把fileB中的当前行记录吸入diffB(如果当前行为空白则不写入)
B. 当fileA与fileB当前行的列2相同, 但列1不相同时:
   1. 把fileA中的当前行记录写入diffA
   2. 把fileB中的当前行记录吸入diffB
   
fileA (15行)内容:(# 后的内容为注释, 实际文件中不存在)
  1. A|02942|20121126111458  # 相同记录(忽略第3列)
  2. A|03055|20121126110255  # 相同记录(忽略第3列)
  3. A|08931|20121126133649  # 写入diffB(fileB没有该记录)
  4. A|08932|20121126133743  # 写入diffA(与fileB的列1不相同)
  5. A|27822|20121126212704  # 相同记录(忽略第3列)
  6. A|31520|20121126153305  # 写入diffB(fileB没有该记录)
  7. A|31612|20121126103716  # 写入diffB(fileB没有该记录)
  8. D|40439|20121126193846  # 写入diffA(与fileB的列1不相同)
  9. D|43223|20121126113926  # 写入diffB(fileB没有该记录)
  10. A|45789|20121126142204  # 写入diffB(fileB没有该记录)
  11. A|46651|20121126143730  # 写入diffB(fileB没有该记录)
  12. A|49212|20121126152429  # 写入diffB(fileB没有该记录)
  13. A|52009|20121126173141  # 写入diffB(fileB没有该记录)
  14. A|60524|20121126171733  # 写入diffA(与fileB的列1不相同)
  15. A|61257|20121126113339  # 写入diffA(与fileB的列1不相同)
复制代码
fileB (12行)内容:(# 后的内容为注释, 实际文件中不存在)
  1. A|02942|20071128200822  # 相同记录(忽略第3列)
  2. A|03055|20071128200827  # 相同记录(忽略第3列)
  3. D|08932|20071128201524  # 写入diffB(与fileA的列1不相同)
  4. D|13992|20091212125210  # 写入diffB(fileA没有该记录)
  5. D|21780|20071128202710  # 写入diffB(fileA没有该记录)
  6. A|27822|20071128203440  # 相同记录(忽略第3列)
  7. D|29558|20071128203708  # 写入diffB(fileA没有该记录)
  8. A|34079|20071128204308  # 写入diffB(fileA没有该记录)
  9. D|34619|20071128204330  # 写入diffB(fileA没有该记录)
  10. A|40439|20071128204933  # 写入diffB(与fileA的列1不相同)
  11. D|60524|20121126171733  # 写入diffB(与fileA的列1不相同)
  12. D|61257|20121126113339  # 写入diffB(与fileA的列1不相同)
复制代码
目标文件: diffA (# 后的内容为注释, 实际文件中不存在)
  1. A|08931|20121126133649  # fileB没有该记录
  2. A|08932|20121126133743  # 与fileB的列1不相同
  3. A|31520|20121126153305  # fileB没有该记录
  4. A|31612|20121126103716  # fileB没有该记录
  5. D|40439|20121126193846  # 与fileB的列1不相同
  6. D|43223|20121126113926  # fileB没有该记录
  7. A|45789|20121126142204  # fileB没有该记录
  8. A|46651|20121126143730  # fileB没有该记录
  9. A|49212|20121126152429  # fileB没有该记录
  10. A|52009|20121126173141  # fileB没有该记录
  11. A|60524|20121126171733  # 与fileB的列1不相同
  12. A|61257|20121126113339  # 与fileB的列1不相同
复制代码
目标文件: diffB (# 后的内容为注释, 实际文件中不存在)
  1. D|08932|20071128201524  # 与fileA的列1不相同
  2. D|13992|20091212125210  # fileA没有该记录
  3. D|21780|20071128202710  # fileA没有该记录
  4. D|29558|20071128203708  # fileA没有该记录
  5. A|34079|20071128204308  # fileA没有该记录
  6. D|34619|20071128204330  # fileA没有该记录
  7. A|40439|20071128204933  # 与fileA的列1不相同
  8. D|60524|20121126171733  # 与fileA的列1不相同
  9. D|61257|20121126113339  # 与fileA的列1不相同
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP