2016-05-12 106 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