免费注册 查看新帖 |

Chinaunix

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

[文本处理] 下面是我简化过一个例子,多行处理的比较难 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-17 15:20 |只看该作者 |倒序浏览
这下面用一个更简单的安例:

只用当前行NR和上面两行NR-1,NR-2比较
A B
B C
B B
C C
A C
A A
A C

输出结果:
A B
B C
B B NotFound #上面两行是AB BC
C C NotFound #上面两行是BB BC
C C Found    # 上面两行是BB CC,这里出现了CC
A C NotFound  #上面两行是CC CC,没出现AC
A A NotFound  #上面两行是 CC AC
A C Found     #上面两行是AC AA,这里出现了一个AC

论坛徽章:
0
2 [报告]
发表于 2012-10-17 15:39 |只看该作者
  1. awk '{if(NR>=3){a[NR]=$0;if((a[NR]==a[NR-1])||(a[NR]==a[NR-2])){print a[NR]" Found"}else{print a[NR]" Not Found"}}else{a[NR]=$0;print a[NR]}}' filename
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2012-10-17 16:00 |只看该作者
回复 1# tyguaike
  1. awk '{s[NR]=$0} {if(s[NR-1]==$0||s[NR-2]==$0) print $0" Fond"; else print $0" NotFond"}'
复制代码

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
4 [报告]
发表于 2012-10-17 16:02 |只看该作者
回复 2# xuqq999


    最后else就前2行,,,没必要a[NR]=$0;print a[NR],就直接print $0就行了吧

论坛徽章:
0
5 [报告]
发表于 2012-10-17 16:15 |只看该作者
回复 1# tyguaike


    你还是看原贴吧,7楼 我写了答案了。

论坛徽章:
0
6 [报告]
发表于 2012-10-17 17:11 |只看该作者
  1. awk '{if(NR>2){if($0==a[0] || $0==a[1])print $0,"FOUND";else print $0,"NOT FOUND";}else print $0;a[NR%2]=$0}'
复制代码

论坛徽章:
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
7 [报告]
发表于 2012-10-17 19:55 |只看该作者
回复 3# greysky-zfj


    我想你自己应该没运行过吧,你这条命令不对。

论坛徽章:
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
8 [报告]
发表于 2012-10-17 20:04 |只看该作者
  1. awk 'NR<3{a[NR]=$0;print a[NR];next}{if($0==a[NR-2] || $0==a[NR-1])print $0" Found";else print $0" NotFound";a[NR]=$0}' urfile
复制代码

论坛徽章:
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
9 [报告]
发表于 2012-10-17 20:51 |只看该作者
回复 4# dn833


    不行的,一定要执行a[NR]=$0,不然的话就没有a[1]和a[2]了。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
10 [报告]
发表于 2012-10-17 22:00 |只看该作者
回复 9# yestreenstars
  1. [root@cloud tmp]# awk '{if(NR>=3){a[NR]=$0;if((a[NR]==a[NR-1])||(a[NR]==a[NR-2])){print a[NR]" Found"}else{print a[NR]" Not Found"}}else{a[NR]=$0;print a[NR]}}' file
  2. A B
  3. B C
  4. B B Not Found
  5. C C Not Found
  6. A C Not Found
  7. A A Not Found
  8. A C Found
  9. [root@cloud tmp]# awk '{if(NR>=3){a[NR]=$0;if((a[NR]==a[NR-1])||(a[NR]==a[NR-2])){print a[NR]" Found"}else{print a[NR]" Not Found"}}else{print $0}}' file
  10. A B
  11. B C
  12. B B Not Found
  13. C C Not Found
  14. A C Not Found
  15. A A Not Found
  16. A C Found
复制代码
这俩有啥区别???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP