免费注册 查看新帖 |

Chinaunix

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

[文本处理] 计算不同字符串类型出现次数 [复制链接]

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
11 [报告]
发表于 2016-12-27 11:26 |只看该作者
本帖最后由 Windows19 于 2016-12-27 11:27 编辑

回复 10# zxy877298415


你好   计算数字串结果对了 字母串计算不对 还有总共的那个需求计算没打印出来   但我这边返回信息如下
shuzi:12
zifu:31
awk: cmd. line:1: (FILENAME=a.txt FNR=35) fatal: attempt to use array `n' in a scalar context
$

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
12 [报告]
发表于 2016-12-27 12:11 |只看该作者
本帖最后由 zxy877298415 于 2016-12-27 12:12 编辑

回复 11# Windows19


  1. awk '!/^ $/&&FNR==NR{if($0~/[0-9]/) a[$0];else b[$0];next}{for(i in a) {if(gsub(i,"&",$0)) {if(!p[$0]) {c++;p[$0]=1;n[$0]++}}}for(i in b) {if(gsub(i,"&",$0)) {if(!q[$0]) {d++;q[$0]=1;n[$0]++}}};}END{print "shuzi:"c"\nzifu:"d;for(i in n) {if(n[i]==2) s++}print "sum:"s}' b a  
  2. shuzi:12
  3. zifu:10
  4. sum:2
复制代码

按照你给的例子没问题啊!ewfkwekr2w34per315685555688794565556\/@fbwekryewkhgfbsiklkeyf 这条不应该计入!

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
13 [报告]
发表于 2016-12-27 12:41 |只看该作者
  1. awk 'FNR==NR{if($0~/^[0-9]+$/)a[$0];if($0~/^[a-zA-Z]+$/)b[$0];next}{for(i in a){if($0 ~ i){c++;n[NR]++;break}};for(i in b){if($0 ~ i){d++;n[NR]++;if(n[NR] == 2){s++};break}}}END{print "shuzi:"c"\nzifu:"d"\nsum:"s}' b.txt a.txt
复制代码

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
14 [报告]
发表于 2016-12-27 12:51 |只看该作者

  1. awk 'function cnt(a,p){for(i in a)if($0~i){p?c[FNR]++:c[FNR]--;break}}NR==FNR{if(!NF){f=1;next};f?b[$0]:a[$0];next}{cnt(a,1);cnt(b)}END{for(i in c)c[i]?c[i]>0?x++:y++:z++;print "数字串:"x+z RS "字母串:"y+z RS "总共:"z}' b a
复制代码

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
15 [报告]
发表于 2016-12-27 13:12 |只看该作者
3156855556887945655564

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
16 [报告]
发表于 2016-12-27 14:14 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my ($NS, %hKeys) = (0, ());
  5. while (<>){
  6.     if (@ARGV){
  7.         next if (/\A\s*\z/);
  8.         chomp;
  9.         my $k = /\A\d/ ? 'N' : 'S';
  10.         $hKeys{$k}{$_} = 1;
  11.         next;
  12.     }
  13.     my $N = grep {$hKeys{'N'}{$_}} /\d+/g;
  14.     my $S = grep {$hKeys{'S'}{$_}} /[a-z]+/gi;
  15.     $NS++ if ($S and $N);
  16.     $hKeys{'S'}{'!C'}++ if ($S);
  17.     $hKeys{'N'}{'!C'}++ if ($N);
  18. }

  19. print join ("\n", "Num Str : $NS", "Strings : $hKeys{'S'}{'!C'}", "Numbers : $hKeys{'N'}{'!C'}");
复制代码

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
17 [报告]
发表于 2016-12-27 14:14 |只看该作者
谢谢各位老师  计算结果都正确  但是有点慢呢 测试b文件1m大小 a文件不到2m大小 等了26分钟还没没出结果 中途放弃了
请问还有快的么

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
18 [报告]
发表于 2016-12-27 14:51 |只看该作者
应该没有你说的那么慢吧?

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
19 [报告]
发表于 2016-12-27 14:56 |只看该作者
回复 17# Windows19


测试数据应该跟你提供的数据有比较大的差别吧?

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
20 [报告]
发表于 2016-12-27 14:58 |只看该作者
回复 18# sunzhiguolu

是这样用法? perl 0 b.txt a.txt
这样返回信息哦
Use of uninitialized value in concatenation (.) or string at 00 line 21, <> line 47.
Use of uninitialized value in concatenation (.) or string at 00 line 21, <> line 47.
Num Str : 0
Strings :
Numbers :

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP