2016-05-12 196 views
0

我有一個文件與是這樣分割文件

PATTERN1abcdef_abcd_ab 
a 
b 
PATTERN2azerty_az_aze 
c 
d 

,我需要它拆分成像這些較小的文件: PATTERN1abcdef_abcd_ab txt文件,包含至極:

PATTERN1abcdef_abcd_ab 
a 
b 

和PATTERN2azerty_az_aze.txt,至極包括:

PATTERN2azerty_az_aze 
c 
d 

我發現這個perl的命令,它是工作的罰款:

perl -n -e '/^PATTERN/ and open FH, ">output_".$n++; print FH;' inputfile.txt 

除了它不與包含圖案字符串輸出文件重命名。 (例如文件是output_1)

編輯:對不起,我犯了一個錯誤,包含PATTERN的字符串不應該從輸出文本文件中刪除,並且應該是文件名。

回答

0

試試這個:

perl -n -e '/^PATTERN.*/ and open FH, "$&.txt"; print FH;' inputfile.txt 
+0

感謝您的幫助! 此命令在大文件的幾秒鐘內運行,但不會產生任何內容..我不能與inputfile.txt示例文件一起工作。 – user6327116

+0

哈是的!對不起!完美的作品!非常感謝你們兩位。 – user6327116

0

如果你想獲得的值即可投入命名 式樣1文件(符合你的格局即)。 然後,您需要在您的正則表達式中捕獲該名稱,並將其用作文件名的一部分。

perl -n -e '/^(PATTERN\d)/ and open(FH, "> $1.txt")and next; print FH;' inputfile.txt 

注意我捕獲()中的模式,$ 1將保存我們匹配的值。我還在文件打開後添加了下一個,否則匹配也會包含在文件中。

+0

感謝您的幫助! perl -n -e'/ ^(PATTERN \ d)/並打開(FH,「> $ 1.txt」)和下一個;打印FH;' input.txt 正在運行一段時間(input.txt是1 Go),但什麼都不產生。 我從你的消息中刪除了'和next',因爲我想將PATTERN1保留在PATTERN1.txt的第一行,它不起作用: perl -n -e'/ ^(PATTERN \ d)/並打開(FH,「> $ 1.txt」);打印FH;' input.txt – user6327116

+0

對不起,您的命令可以使用input.txt示例文件,但現在不適用於我的1Go文本文件。我在上面。 我發現它爲什麼不起作用。事實上,我的圖案線可能是PATTERNpsks1225s 字符串的長度是可變的,可以包含字母,數字或_ – user6327116

+0

因此,您的圖案將是/^PATTERN \ w + /將覆蓋您的需求。 – cberning