免费注册 查看新帖 |

Chinaunix

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

[文本处理] 将两个文本中不同的地方标识出来 [复制链接]

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

比如说这样的两个文本,怎么把不同的地方标识出来:
文本1:
  1. 1111 1231 2323
  2. 1234 5464 6465
  3. 1231 3435 3453
  4. 2342 2342 2342
复制代码
文本2:
  1. 1111 1131 2323
  2. 1234 5464 6444
  3. 1231 3435 1234
  4. 2342 2342 2342
复制代码
最后要得到的文本是这样:
  1. 1111 1231 2323        |        1111 1[1]31 2323
  2. 1234 5464 6465        |        1234 5464 64[44]
  3. 1231 3435 3453        |        1231 3435 [1234]
复制代码
相同的行可以不显示,我想到了diff但是最后如果要加上那个方括号的话暂时还没有思路,请求指点~~~~~~

论坛徽章:
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-09-24 12:33 |只看该作者
也就是一个一个字符比较?

论坛徽章:
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
3 [报告]
发表于 2012-09-24 12:44 |只看该作者
本帖最后由 rdcwayx 于 2012-09-24 15:11 编辑

列出不同。
  1. awk '{ s=split($0,a,"");
  2.        getline b < "file2";t=split(b,c,"");
  3.        max=(s>t)?s:t;
  4.        x=0
  5.        for (i=1;i<=max;i++) if (a[i]!=c[i]) {c[i]="[" c[i]"]"; x++}
  6.        if (!x) {next}
  7.        for (i=1;i<=max;i++) printf a[i]
  8.        printf "\t|\t"
  9.        for (i=1;i<=max;i++) printf c[i]
  10.        printf RS}' file1

  11. 1111 1231 2323  |       1111 1[1]31 2323
  12. 1234 5464 6465  |       1234 5464 64[4][4]
  13. 1231 3435 3453  |       1231 3435 [1][2][3][4]
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2012-09-24 12:45 |只看该作者
回复 1# xu_liuzhen


    try vimdiff

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2012-09-24 12:47 |只看该作者
回复 1# xu_liuzhen


    try:
  1. awk 'NR==FNR{for(i=1;i<=NF;i++){x[NR" "i]=$i};next}{for(i=1;i<=NF;i++){if(x[FNR" "i] != $i){l=split($i,a,"");split(x[FNR" "i],b,"");for(j=1;j<=l;j++){if(a[j]==b[j]){t=t b[j]}else{t=t"["b[j]"]"}}$i=t;t=""}}}gsub(/\]\[/,"")||/\[/' file2 file1
  2. 1111 1[1]31 2323
  3. 1234 5464 64[44]
  4. 1231 3435 [1234]
复制代码

论坛徽章:
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
6 [报告]
发表于 2012-09-24 12:50 |只看该作者
@blackold
这个vimdiff 好用

论坛徽章:
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-09-24 12:57 |只看该作者
本帖最后由 rdcwayx 于 2012-09-24 15:11 编辑

这次就完全符合了。
  1. awk '{ s=split($0,a,"");
  2.        getline b < "file2";t=split(b,c,"");
  3.        max=(s>t)?s:t;
  4.        x=0
  5.        for (i=1;i<=max;i++) if (a[i]!=c[i]) {c[i]="[" c[i]"]"; x++}
  6.        if (!x) {next}
  7.        for (i=1;i<=max;i++) printf a[i]
  8.        printf "\t|\t"
  9.        for (i=1;i<=max;i++) printf c[i]
  10.        printf RS}' file1|sed "s/\]\[//g"
  11. 1111 1231 2323  |       1111 1[1]31 2323
  12. 1234 5464 6465  |       1234 5464 64[44]
  13. 1231 3435 3453  |       1231 3435 [1234]
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-09-24 14:02 |只看该作者
大哥,你太牛了,能分享一下你学习AWK的经验不,,回复 5# yinyuemi


   

论坛徽章:
0
9 [报告]
发表于 2012-09-24 14:05 |只看该作者
十分感谢,我先研究下您的代码~~回复 5# yinyuemi


   

论坛徽章:
0
10
发表于 2012-09-24 14:06
太谢谢了,我先看看,看不懂了再请教   回复 7# rdcwayx


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP