免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bmne
打印 上一主题 下一主题

[文本处理] 麻烦大神给写个匹配代码,谢谢! [复制链接]

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
11 [报告]
发表于 2016-08-06 08:49 |只看该作者
回复 10# Windows19


大神,辛苦了

1、这是个经典比较对比的代码啊grep -Ff  你厉害威武,加上个F,马上就神速运行了。但它是比较对比a中任意位置的字符串的,对我来说不适合。我要的是a中行首字符串必须和b相同,我学习了一段时间,但没找到grep怎样匹配a中行首字符串必须和b相同。请指导

2、你二楼的代码,好用。提点过分的要求,能否给精简一下写连在一起?这个代码是我必须收藏的

3、另外增加个要求。把下面给改一下,取个反向的。我不会加 !   
    awk 'BEGIN{count=0}NR==FNR{w[count]=$0;count++}NR>FNR{for (i in w) if(w==$0){flag=1;break}if(flag!=1){print $0}flag=0}' b.txt a.txt
    要求:提取a中同b中相同的行


大神若忙,没时间就算了,若有点功夫就帮帮我。感谢

另,你是实战大神,写出的代码很实用。实话



   

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
12 [报告]
发表于 2016-08-06 21:59 |只看该作者
Try this:
awk 'BEGIN{FS=""}NR==FNR{a[$0]=1}NR!=FNR{if(a[$1$2$3$4$5$6$7])print $0}' b.txt a.txt

论坛徽章:
0
13 [报告]
发表于 2016-08-06 22:11 |只看该作者
本帖最后由 华小飞_Perl 于 2016-08-07 21:27 编辑

写了个Perl代码发到shell的版块,不会被说吧
  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;

  4. open INPUT_1, '<', 'b.txt' or die "Don't open the file: $!";
  5. open INPUT_2, '<', 'a.txt' or die "Don't open the file: $!";

  6. my (@b_array, %b_hash);
  7. while (<INPUT_1>) {
  8.         chomp;
  9.         push @b_array, $_;
  10. }
  11. %b_hash = map { $_ => 1 } @b_array;
  12. my $ref_b = \%b_hash;

  13. while (my $a_item = <INPUT_2>) {
  14.         chomp $a_item;
  15.         my $copy_of_a = $a_item;
  16.         $a_item =~ s/(\w{7})\w+/$1/;
  17.        
  18.         print $copy_of_a, "\n" if ( $ref_b->{$a_item} );
  19. }
  20. close INPUT_1;
  21. close INPUT_2;
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
14 [报告]
发表于 2016-08-07 08:06 |只看该作者
回复 12# ll104567



大神厉害,精细准确,好用

必收藏之


另,如果大神有点时间,给把11楼第三条的代码取反。(只提取a中同b的行)


谢谢大神





   

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
15 [报告]
发表于 2016-08-07 08:09 |只看该作者
回复 13# 华小飞_Perl



大神,你这个代码能运行?你再看看

我的问题?不上截图了,我没运行起来

辛苦




   

论坛徽章:
0
16 [报告]
发表于 2016-08-07 08:39 |只看该作者
按照你给的文本示例是没问题的,运行起来无误后才发出来的,你原来的文件是都是数字的吗,不是的话就不行了,要改一下正则,发的源码是匹配数字的。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
17 [报告]
发表于 2016-08-08 12:50 |只看该作者
给你一个思路
把b的所有行放到hash里,然后a再来查

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
18 [报告]
发表于 2016-08-08 13:43 |只看该作者
本帖最后由 liion631818 于 2016-08-08 13:44 编辑
  1. ubuntu:~/shell$ awk 'FNR==NR{a[$0]++;next}{e=substr($0, 1, 7); for(i in a)if(e ~ i){print $0;break}}' b.txt a.txt
  2. 123456789
  3. 234567890
  4. 345678901
  5. 456789012
复制代码
回复 1# bmne


   

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
19 [报告]
发表于 2016-08-08 14:06 |只看该作者
回复 18# liion631818


谢谢大神

抽空还是来帮助,感谢

   

论坛徽章:
0
20 [报告]
发表于 2016-08-08 17:05 |只看该作者
回复 17# cjaizss

大神见解给力,这样很方便!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP