2012-02-23 32 views
-1

我有一個文件,其每個第2行的長度不相等。我想讓這些行相等(每行的第2行應該等於10個字符),但是帶有新的標識符(每個奇數行)。在文件中刻出長度相同但具有新標識符的行

FILE - >

>ZQMK36301EDYQE 
ZHZHHEXZZHHZZHHZZXHHHEHHHZZZHHHZHXZHZ 
>ZQMK36301EEMJ9 
ZZZXHZHHXHHHEZZEEZZHZZZZXEZ 
>ZQMK36301EOEM5 
ZXHXHZZHEHHHXZEZHXXXHXHHHHXEHHHZHHHH 


desired output -> 


>ZQMK36301EDYQE 
ZHZHHEXZZH 
>ZQMK36301EDYQE#2 
HZZHHZZXHH 
>ZQMK36301EDYQE#3 
HEHHHZZZHH 
>ZQMK36301EEMJ9 
ZZZXHZHHXH 
>ZQMK36301EEMJ9#2 
HHEZZEEZZH 
>ZQMK36301EOEM5 
ZXHXHZZHEH 
>ZQMK36301EOEM5#2 
HHXZEZHXXX 
>ZQMK36301EOEM5#3 
HXHHHHXEHH 

在這裏,如果我們採取的第一個線,其是標識符(> ZQMK36301EDYQE),並在其第二行包含37個字符。現在它會產生3個長度相等的序列(i:e 10),如果剩餘的字符小於10,我們將拋出該部分。現在,每一個等長的新行都有一個標識符,它與來自序列的部分相同,但後跟「#」和數字。我想爲整個文件做這個。請幫忙。

感謝和問候, 維卡斯

+1

因此,您有望嘗試解決問題並展示您的工作。發佈前請閱讀[常見問題]和[問]。 – 2012-02-23 18:11:31

+0

我很抱歉沒有告訴我已經嘗試過。我對Perl和堆棧溢出很陌生,只是試圖緩慢地學習它。在我最後的帖子中,我總是給出我嘗試過的代碼,但爲此,我甚至不知道如何開始。 – Vikas 2012-02-24 08:53:01

回答

1

作爲一個班輪:

perl -nwle ' 
    $i=0; 
    for my $add (<>=~/.{10}/g) { 
     printf "%s%s\n%s\n", $_, $i++ ? "#$i":"", $add; 
    }' inputfile 

-n讀取文件中的行由行中$_和存儲線。 -l autochomps輸入。我們假設第一行是標題,第二行是數據。 $i是計數器,因此每個新線對都重置。 for循環列表是通過讀取一行<>,然後使用正則表達式從中提取10個字符的長字符串來實現的。然後,我們只是打印這些東西,並確保不顯示零計數器。

+0

非常感謝。它工作得很好。 – Vikas 2012-02-24 08:49:14

+0

但我不明白一件事,那就是如何在這段代碼中告訴Perl切割每一行而不是標識符? – Vikas 2012-02-24 08:50:42

+0

不客氣。 '「..通過閱讀一行<> ..」'如果添加選項'-MO = Deparse',您可以更好地瞭解發生的情況。 – TLP 2012-02-24 11:09:17

相關問題