首页 文章

在各个单独的文件之间打印行

提问于
浏览
2

我有一个5000行的大文件,它有一个重复的模式,如下所示:

ABC
111
222
333
XYZ

ABC
444
555
666
777
XYZ

..
..

ABC
777777777
888888888
999999999
222
333
111
XYZ

我想在每个'ABC'和'XYZ'之间提取内容并将其写入单独的文件 .

例如:file1应该有

ABC
111
222
333
XYZ

File2应该有

ABC
444
555
666
777
XYZ

Filen应该有

ABC
777777777
888888888
999999999
222
333
111
XYZ

等等 .

我们怎么能实现这个目标?我在下面读过这些线程,但它只写了一个文件 . 对我的情况没有帮助 .

How to select lines between two marker patterns which may occur multiple times with awk/sed

Print lines between two patterns to new file

3 回答

  • 2
    awk '/^ABC/{file="file"c++}{print >>file}' a
    
  • 4

    Perl救援!

    < bigfile perl -nwe 'print {$OUT} $_
                             if (/ABC/ && do { open $OUT, ">", "file" . ++$i or die $!}
                                ) ... /XYZ/'
    
    • n 逐行读取文件

    • 仅在 /ABC//XYZ/ 之间打印

    • /ABC/ 为真时,即我们正在开始一个新的部分时,会打开一个新文件并将其与文件句柄 $OUT 相关联 . $i 是文件的编号 .

  • 1
    awk '
      # setup our output file name file0, file1, file2, ...
      $0 == "ABC"{if (i) {close(f)};f="file"i++;};
      # use inclusive range match 
      $0 == "ABC",$0 == "XYZ"{print > f}
    '
    

相关问题