Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用模式分割文件,并使用包含此模式的字符串命名每个结果文件(perl)_Linux_Perl - Fatal编程技术网

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

Linux 使用模式分割文件,并使用包含此模式的字符串命名每个结果文件(perl),linux,perl,Linux,Perl,我有一个这样的文件 PATTERN1abcdef_abcd_ab a b PATTERN2azerty_az_aze c d 我需要将其拆分为以下较小的文件: 模式1ABCDEF_abcd_ab.txt,其中包含: PATTERN1abcdef_abcd_ab a b PATTERN2azerty_az_aze c d 和PATTERN2azerty_az_aze.txt,其中包含: PATTERN1abcdef_abcd_ab a b PATTERN2azerty_az_aze c d

我有一个这样的文件

PATTERN1abcdef_abcd_ab
a
b
PATTERN2azerty_az_aze
c
d
我需要将其拆分为以下较小的文件: 模式1ABCDEF_abcd_ab.txt,其中包含:

PATTERN1abcdef_abcd_ab
a
b
PATTERN2azerty_az_aze
c
d
和PATTERN2azerty_az_aze.txt,其中包含:

PATTERN1abcdef_abcd_ab
a
b
PATTERN2azerty_az_aze
c
d
我发现这个perl命令运行良好:

perl -n -e '/^PATTERN/ and open FH, ">output_".$n++; print FH;' inputfile.txt
但它不会使用包含模式的字符串重命名输出文件。(这些文件是输出的。\u 1。例如)

编辑:很抱歉,我犯了一个错误,不应从输出文本文件中删除包含该模式的字符串,该字符串应为文件名。

请尝试以下操作:

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

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

如果您试图获取要放入名为 图案1(与你的图案相配)。 然后,您将希望在正则表达式中捕获该名称,并将其用作文件名的一部分

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

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

如果您试图获取要放入名为 图案1(与你的图案相配)。 然后,您将希望在正则表达式中捕获该名称,并将其用作文件名的一部分

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

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

感谢您的帮助!perl-n-e'/^(PATTERN\d)/和open(FH,“>$1.txt”)和next;打印FH;'input.txt运行了一段时间(input.txt为1次),但没有产生任何结果。我从您的消息中删除了“and next”,因为我想将PATTERN1保留在PATTERN1.txt的第一行,它也不起作用:perl-n-e'/^(PATTERN\d)/和open(FH,“>$1.txt”);打印FH;'input.txt抱歉,您的命令适用于input.txt示例文件,但目前不适用于我的1Go文本文件。我在上面。我发现了为什么它不起作用。事实上,我的图案行可以是patternsks1225s。字符串的长度是可变的,可以包含字母、数字或_,因此您的图案将是/^pattern\w+/,以满足您的需要。谢谢您的帮助!perl-n-e'/^(PATTERN\d)/和open(FH,“>$1.txt”)和next;打印FH;'input.txt运行了一段时间(input.txt为1次),但没有产生任何结果。我从您的消息中删除了“and next”,因为我想将PATTERN1保留在PATTERN1.txt的第一行,它也不起作用:perl-n-e'/^(PATTERN\d)/和open(FH,“>$1.txt”);打印FH;'input.txt抱歉,您的命令适用于input.txt示例文件,但目前不适用于我的1Go文本文件。我在上面。我发现了为什么它不起作用。事实上,我的图案行可以是patternsks1225s。字符串的长度是可变的,可以包含字母、数字或_,因此您的图案将是/^pattern\w+/,以满足您的需要。谢谢您的帮助!此命令在几秒钟内使用大文件运行,但不产生任何结果。。我也不使用inputfile.txt示例文件。哈,是的!很抱歉工作完美!非常感谢你们两位。谢谢你们的帮助!此命令在几秒钟内使用大文件运行,但不产生任何结果。。我也不使用inputfile.txt示例文件。哈,是的!很抱歉工作完美!非常感谢你们两位。