我有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
答案 0 :(得分:4)
awk '/^ABC/{file="file"c++}{print >>file}' a
答案 1 :(得分:2)
Perl救援!
< bigfile perl -nwe 'print {$OUT} $_
if (/ABC/ && do { open $OUT, ">", "file" . ++$i or die $!}
) ... /XYZ/'
n
逐行读取文件/ABC/
和/XYZ/
/ABC/
为真时,即我们重新开始新版块时,会打开一个新文件并将其与文件句柄$OUT
相关联。 $i
是文件的编号。答案 2 :(得分: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}
'