免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk两个文件对比处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-15 19:40 |只看该作者 |倒序浏览
本帖最后由 hgx126 于 2012-10-15 19:42 编辑

两个文本文件:
a
  1. 张存培,88130110281154311,88130110281154311,240.00,5439,天林,20121010,成功
  2. 邓天科,88130110281271294,88130110281271294,180.00,5439,天林,20121010,成功
  3. 邓开民,88130110281309201,88130110281309201,180.00,5439,天林,20121011,成功
  4. 邓开盛,88130110281347376,88130110281347376,240.00,5439,天林,20121011,成功
  5. 杜国龙,88130110973173278,88130110973173278,240.00,5439,天林,20121011,成功
  6. 杜春韦,88130110281984067,88130110281984067,240.00,5439,天林,20121011,成功
复制代码
b
  1. 1950笔,183924元
  2. 杜国勤,88130111009563231,88130111009563231,120.00,5439,天林,20121012,成功
  3. 罗秀容,88130111152781826,88130111152781826,180.00,5439,天林,20121012,成功
  4. 宋秋英,88130111139601124,88130111139601124,180.00,5439,天林,20121012,成功
  5. 席文映,88130110285030332,88130110285030332,240.00,5439,天林,20121012,成功
  6. 杜春茂,88130110282152486,88130110282152486,60.00,5439,天林,20121012,成功
复制代码
求awk命令代码:以逗号为分隔符,如果a文件最后一行的第7个元素不等于b文件最后一行的第7个元素,则将b文件除第一行之外的其它内容追加到a文件后;如两个元素相等,则不追加。
我始终没弄出来,求大家帮忙。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-10-16 07:24 |只看该作者
如何始终没弄出来,先贴代码出来让大家给你改改

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2012-10-16 09:26 |只看该作者
本帖最后由 yestreenstars 于 2012-10-16 09:28 编辑

我想这个应该能满足你:
  1. #!/bin/bash
  2. x=$(awk -F, 'END{print $7}' a)
  3. y=$(awk -F, 'END{print $7}' b)
  4. if [ "$x" != "$y" ]; then
  5.         awk 'NR>1' b >> a
  6. fi
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-10-16 10:10 |只看该作者
  1. awk -F, 'NR==FNR{a[NR]=$7;b[NR]=$0}NR>FNR{a[FNR]=$7;c[FNR]=$0}END{if(a[NR]!=a[FNR]){for(i=1;i<=FNR;i++)print b[i]};for(i=2;i<=FNR;i++)print c[i]}' a b
复制代码
写的不好,求优化

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-10-16 13:34 |只看该作者
回复 1# hgx126
  1. awk -F, 'FNR==NR{a=$7} FNR<NR{b=$7} { if(FNR==1){if(NR==1){str=$0}} else {str=str"\n"$0} } END{if(a!=b) print str}' a b
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
6 [报告]
发表于 2012-10-16 14:04 |只看该作者
本帖最后由 yestreenstars 于 2012-10-16 14:06 编辑

回复 5# greysky-zfj


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-10-19 13:44 |只看该作者
  1. awk -F , 'NR==FNR{a[FNR]=$0;b=$7;c=FNR;next}
  2.             {print;d=$7}
  3.             END{if (b==d) for (i=2;i<=c;i++) print a[i]}' b a
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-10-24 23:04 |只看该作者
感谢各位,特别是rdcwayx 兄,帮我解决了这个问题。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
9 [报告]
发表于 2014-06-21 22:07 |只看该作者
学习了。mark
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP