2016-11-19 43 views
0

我有头文件格式以>字符开头的文件。说如果标题的格式如下:'> anything1 | anything2',我使用这个脚本修剪标题并获得输出标题'> anything1'。获得输出所需的循环中有哪些变化?

while (<>) { 
    if (/^(>[^|]*)/) { 
    print "$1\n"; 
    } else { 
    print; 
    } 
} 

但现在,在我的文件中的某些头都大这样的:

>anything1|anything2|anything3 bla bla bla /# 

有的标题是这样的:

>anything1 
从这种混合头型

现在,在一个单独的文件,如果我想要一个输出,可以将大小最多为2个字符的标题修剪为较大的标题(即,对于上面的大标题,'> anything1 | anything2'),并为小标题保留一个字符(即'> anything1'仅适用于在sm以上所有标题),我需要在循环中做些什么改变?

感谢

回答

1

如何走出该正则表达式

while (<>) 
{ 
    if (/^>/) 
    { 
     my @fields = split '\|', $_; 

     if (@fields <= 2) { print $fields[0] } 
     else    { print join '|', @fields[0,1] } 

     next; 
    } 

    print; 
} 

的请考虑可能的边缘情况。当你有一个数组时,这很容易。

使用正则表达式,可以分别匹配个案,或仔细想出一个以某种方式将这两个事件绑定到三个不同场景的场景,这将涉及更多的事情。

+0

我不知道我是否做错了什么,但我运行脚本为:perl script.pl inputfile> outputfile,它显示:语法错误在1.pl第8行,靠近“say加入” 执行1.pl由于编译错误而中止 –

+1

@ J.Carter我推测脚本中有更多内容。另外,我对这个“说”sl - - 它需要使用功能qw(说);'。我用'print'取代了它。 – zdim

+0

Stack Overflow已经成为无法调试自己早餐的人员的代码工厂,让我感到困扰。 – Borodin