gpt4 book ai didi

perl - 如何在perl中将某些匹配字符串之间的所有行打印到不同的文件

转载 作者:行者123 更新时间:2023-12-04 05:23:16 24 4
gpt4 key购买 nike

我对 perl 脚本相当陌生,需要一些帮助。以下是我的查询:

我有一个文件,其内容如下:

AA ABC 0 0 
line1
line2
...
AA XYZ 1 1
line..
line..
AA GHI 2 2
line..
line...

现在我想得到那些具有起始字符串/模式的行之间的所有行 "AA"并将它们写入文件 ABC.txt , XYZ.txt , GHI.txt , 分别包括 AA* ,例如 ABC.txt应该看起来像
AA ABC 0 0
line1
line2...

XYZ.txt应该看起来像
AA XYZ 1 1
line..
line..

希望在这个问题上很清楚,非常感谢有关此问题的任何帮助。

谢谢,
桑迪

最佳答案

我想你是在要求一个算法,因为你没有指定你需要什么帮助。

  • 声明一个用于输出的文件句柄。
  • 虽然您还没有到达输入文件的末尾,
  • 读一行。
  • 如果是标题行,
  • 解析一下。
  • 确定文件名。
  • (重新)打开输出文件。
  • 将行打印到输出文件句柄。


  • 以免您尝试使用自我发布上述内容以来发布的糟糕解决方案之一,以下是代码:
    my $fh;
    while (<>) {
    if (my ($fn) = /^AA\s+(\S+)/) {
    $fn .= '.txt';
    open($fh, '>', $fn)
    or die("Can't create file \"$fn\": $!\n");
    }

    print $fh $_;
    }

    可能的改进,所有这些都很容易添加:
  • 检查重复的标题。 ( if -e $fn 是一种方式)
  • 在第一个标题之前检查数据。 ( if !$fh 是一种方式)
  • 关于perl - 如何在perl中将某些匹配字符串之间的所有行打印到不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484802/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com