使用模式拆分文件并使用包含此模式的字符串命名每个结果文件(perl)

时间:2016-05-12 18:37:33

标签: linux perl

我有一个像这样的文件

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的字符串,并且应该是文件名。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

如果您尝试将值放入已命名的文件中 PATTERN1(即匹配您的模式)。 然后,您需要在正则表达式中捕获名称并将其用作文件名的一部分。

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

注意我正在捕获()中的模式,而$ 1将保存我们匹配的值。我还在文件打开后添加了下一个,否则匹配也将包含在文件中。