免费注册 查看新帖 |

Chinaunix

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

perl 找关键词,存下该行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-02 02:49 |只看该作者 |倒序浏览
大家好!

我想请教下如何实现以下功能:找到text中的关键词,并存下该行,

例如:
keywords: nmos
text:
M0 (net1 net2 0 0) nmos
M1 (net2 net3) pmos
M2 (net4 net5 0) nmos
最后希望得到一个array_nmos里面还有M0,M2

我的想法是,先在text里找匹配的nmos,然后存下nmos所在行,再split,取第一列存入数组。
foreach (@type)  #type是关键词nmos所在的数组
{
chomp;
if ($netlist=~/{$type}/)
{
##取有nmos(就是type数组里的一个)这行,放入line,这句不会写。。。。。。
push $line,$1;
my (@array_nch) = (split(/\s+/, $line))[0];

多谢大家!!
PS顺便想问下,perl里的case语句要怎么写???

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2012-08-02 04:22 |只看该作者
本帖最后由 yinyuemi 于 2012-08-02 04:35 编辑

回复 1# nelly1

说的不是很清楚,试试:
  1. use Data::Dumper;
  2. %hash1 = map{$_,1}@type
  3. while(<txt>){
  4.    chomp;
  5.    my($s,$key) = (/^(\S+)\s\(.*\)\s(\S+)$/);
  6.    push @{$hash2{$key}},$s if $hash{$key} == 1
  7. }

  8. print Dumper \%hash2;
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-08-02 09:49 |只看该作者
本帖最后由 yizhengming 于 2012-08-02 09:50 编辑

perl -ne 'BEGIN{$keywords = "nmos"};push @{$keywords},(split)[0]."\n" if /\b$keywords\b/;END{print @{$keywords}}' DATA
_____DATA_____
M0 (net1 net2 0 0) nmos
M1 (net2 net3) pmos
M2 (net4 net5 0) nmos

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
4 [报告]
发表于 2012-08-02 10:21 |只看该作者
本帖最后由 cdtits 于 2012-08-02 10:23 编辑
  1. $key = 'nmos';
  2. @words = map  { ($v) = /(\w+)/; $v }
  3.          grep { /$key/ } <DATA>;
  4. print "$key\t: ", join("\t", @words), "\n";

  5. __DATA__
  6. M0 (net1 net2 0 0) nmos
  7. M1 (net2 net3) pmos
  8. M2 (net4 net5 0) nmos
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-08-02 19:30 |只看该作者
回复 2# yinyuemi

不是很懂。。特别是push那句,能给解释下么,多谢

论坛徽章:
0
6 [报告]
发表于 2012-08-02 19:45 |只看该作者
cdtits 发表于 2012-08-02 10:21

为什么这里要加那句map??

论坛徽章:
0
7 [报告]
发表于 2012-08-03 00:33 |只看该作者
你需要先看看map的基础用法也~
回复 6# nelly1


   

论坛徽章:
0
8 [报告]
发表于 2012-08-03 23:43 |只看该作者
回复 7# xiyoulaoyuanjia
恩,看了,但是 Grep 以最后一个“$TYPE" 的值为准,如果我的type是一个数组呢?应该怎么改啊。。


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2012-08-04 05:34 |只看该作者
回复 5# nelly1

push那句code可以生产一个hash,值为arrary的引用
举个例子吧:
  1. perl -MData::Dumper -le '@arr=(1..10);print Dumper \@arr;
  2. map{push @{$hash{$_%2}},$_}@arr;
  3. print Dumper \%hash'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP