我有两个grep模式
首先做pattern1 -(搜索主要章节)
grep -rwA 2 [E:Chapter] input.txt > output.txt然后检查pattern2 (搜索子章节),if pattern2 exists
grep -rwA 8 Sub\sChapter input.txt > chapter1.txt
else go to next match for pattern1示例输入文件:
bla bla E:chapter1
bla bla bla bla bla
bla bla bla bla bla
Sub Chapter bla bla bla
bla bla bla
Sub chapter bla bla bla
bla....
bla bla E:chapter2
bla bla bla bla bla
Sub Chapter bla bla bla
bla bla bla
Sub chapter bla bla bla
bla.... 我正试图解析一个包含许多章节的大文本,其中一些章节包含了子章节。我希望为包含分章节的章节创建单独的输出文件,这些子章节名为第1.txt、第2.txt,等等。要创建,那么我想转储大约8行的每个子章节下各自的章节文件。比如使用grep -rwA 8..。
我该怎么做?Awk和while循环?
预期产出
Chapter1.txt
Sub Chapter1
bla bla bla
...about 8 lines here.
Sub Chapter2
...
Sub Chapter3
...Chapter2.txt
Sub Chapter1
...
Sub Chapter2
...发布于 2018-04-04 21:51:36
awk去营救!
由于您的示例输入不会区分-A8选项,所以我使用了-A1等效项。
$ awk -v a=1 '/E:chapter/ {ch++; c=a+1}
/Sub Chapter/ {c=a+1}
c&&c-- {print > "Chapter"ch}' file会给
==> Chapter1 <==
bla bla E:chapter1
bla bla bla bla bla
Sub Chapter bla bla bla
bla bla bla
==> Chapter2 <==
bla bla E:chapter2
bla bla bla bla bla
Sub Chapter bla bla bla
bla bla bla更新以添加标头
$ awk -v a=1 '/E:chapter/ {file="Chapter"++ch".txt";
print "Chapter"ch > file;
sc=0; c=a+1}
/Sub Chapter/ {c=a+1;
print "Sub Chapter"++sc > file}
c&&c-- {print > file}' file
==> Chapter1.txt <==
Chapter1
bla bla E:chapter1
bla bla bla bla bla
Sub Chapter1
Sub Chapter bla bla bla
bla bla bla
==> Chapter2.txt <==
Chapter2
bla bla E:chapter2
bla bla bla bla bla
Sub Chapter1
Sub Chapter bla bla bla
bla bla bla如果您想跳过实际的行,其中有章节和子章节行,添加; next在每个块的末尾。
发布于 2018-04-05 00:28:42
你的问题还不清楚,但听起来你需要的是:
awk '/E:chapter/{close(out); out="chapter"++c} {print > out}' input.txt如果这不是您需要的内容,那么编辑您的问题,以包括简洁、可测试的示例输入和预期输出。现在,您正在描述您的输入和输出,但是没有什么可以对其进行测试,以证明我们的脚本是否从发布的示例输入中生成了预期的输出。
https://stackoverflow.com/questions/49660820
复制相似问题