【问题标题】:split file using pattern and name each resulting files with the string containing this pattern (perl)使用模式拆分文件并使用包含此模式的字符串命名每个结果文件(perl)
【发布时间】:2020-08-28 07:01:29
【问题描述】:

我有一个文件是这样的

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

【问题讨论】:

    标签: linux perl


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 感谢您的帮助!此命令在几秒钟内使用大文件运行,但没有产生任何结果。我也不适用于 inputfile.txt 示例文件。
    • 哈,是的!对不起 !工作完美!非常感谢你们两个。
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的帮助! perl -n -e '/^(PATTERN\d)/ and open(FH, "> $1.txt") and next;打印 FH;' input.txt 运行了一段时间(input.txt 是 1 Go),但什么也没产生。正如我从您的消息中所理解的那样,我删除了“和下一个”,因为我想将 PATTERN1 保留在 PATTERN1.txt 的第一行,它也不起作用: perl -n -e '/^(PATTERN\d) / 和 open(FH, "> $1.txt");打印 FH;'输入.txt
    • 抱歉,您的命令适用于 input.txt 示例文件,但目前不适用于我的 1Go 文本文件。我在上面。我找到了为什么它不起作用。实际上我的模式线可能是 PATTERNpsks1225s 字符串的长度是可变的,可以包含字母、数字或_
    • 因此您的模式将是 /^PATTERN\w+/ 将满足您的需求。
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2022-11-27
    • 2013-12-20
    • 2014-12-24
    • 1970-01-01
    相关资源
    最近更新 更多