2016-11-19 58 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