示例数据:
603 Some garbage data not related to me, 55, 113 ->
1-ENST0000 This is sample data blh blah blah blahhhh
2-ENSBTAP0 This is also some other sample data
21-ENADT)$ DO NOT WANT TO READ THIS LINE.
3-ENSGALP0 This is third sample data
node #4 This is 4th sample data
node #5 This is 5th sample data
This is also part of the input file but i dont wish to read this.
Branch -> 05 13,
44, 1,1,4,1
17, 1150
637 YYYYYY: 2 : %
编辑:在上面的数据中。列宽是固定的部分,但可能有一些我不想阅读的部分。上面的示例数据已经过编辑以反映出来。
因此,在这个输入文件中,我想将第一节'1-ENST0000'的内容读入一个数组,将'2-ENSBTAP0'的内容读入一个单独的数组,依此类推。
我无法想出一个定义模式的正则表达式...前三行有<someNumber>-ENS<someotherstuf>
然后还有node #<some number here>
答案 0 :(得分:1)
这真的是固定列文件吗?如果是这样,那么不要打扰正则表达式。只是在列宽处拆分,也许修剪columen 1中的尾随空格。
答案 1 :(得分:0)
好的,根据您之后的评论,这与上一个问题略有不同。此外,我现在意识到node #54
是第一列中的有效条目。
更新:我现在也意识到你不需要第一列。
更新:通常,您既不想也不需要处理Perl中的字符数组。
更新:现在您已经明确了应该和不应该跳过的内容,这是一个处理该问题的版本。在if
条件下添加模式。
#!/usr/bin/perl
use strict;
use warnings;
my @data;
while ( <DATA> ) {
chomp;
if ( /^[0-9]+-ENS.{5} +(.+)$/
or /^node #[0-9]+ +(.+)$/
) {
push @data, [ split //, $1 ];
}
}
use Data::Dumper;
print Dumper \@data;
__DATA__
603 Some garbage data not related to me, 55, 113 ->
1-ENST0000 This is sample data blh blah blah blahhhh
2-ENSBTAP0 This is also some other sample data
21-ENADT)$ DO NOT WANT TO READ THIS LINE.
3-ENSGALP0 This is third sample data
node #4 This is 4th sample data
node #5 This is 5th sample data
This is also part of the input file but i dont wish to read this.
Branch -> 05 13,
44, 1,1,4,1
17, 1150
637 YYYYYY: 2 : %
至于学习如何钓鱼,我建议你阅读perldoc perltoc中的所有相关内容。