我有一个包含随机行和关键字 END 的文件:
line 1
line 2
...
line 23
END
line 25
....
line 40
END
我想根据关键字 END 将其拆分为多个文件,并将其包含在每个文件中: 文件 1
line 1
line 2
...
line 23
END
文件 2
line 25
.....
line 40
END
我试过了:
csplit -k file_name '/END/' '{*}' but i do not get the correct output.
向正则表达式添加偏移量 1,以在当前文件中包含匹配的END
。我还添加了^
和$
来锚定正则表达式。
csplit -k file -f file --elide-empty-files '/^END$/1' '{*}'
-f file
设置输出文件名前缀--elide-empty-files
这是一个 GNU 扩展,不输出空文件(在本例中为空文件file02
(
输出:
$ head file0*
==> file00 <==
line 1
line 2
...
line 23
END
==> file01 <==
line 25
....
line 40
END
withawk
$ awk '{f= FILENAME"."(c+1); print > f} /^END$/{close(f); c++}' file
$ head file.*
==> file.1 <==
line 1
line 2
...
line 23
END
==> file.2 <==
line 25
....
line 40
END
边缘情况行为:如果输入文件为空(无行(,则不会生成输出。 如果文件有空行,则会将文件的精确副本生成为分区(与没有END
标记或末尾只有一个标记相同(。