在文件末尾的匹配后拆分文件,并将匹配项保留在文件 UNIX 中



我有一个包含随机行和关键字 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标记或末尾只有一个标记相同(。

相关内容

最新更新