Awk 基于公共行前缀将文件拆分为多个文件

Awk 基于公共行前缀将文件拆分为多个文件,awk,Awk,假设我有一个以下格式的文件 prefix1: line 1 prefix1: line 2 prefix1: line 3 prefix2: line 4 prefix2: line 5 prefix3: line 6 prefix3: line 7 prefix3: line 8 prefix3: line 9 prefix3: line 10 我想把它分成三个文件,分别命名为prefix1,prefix2,prefix3,换行符作为完整包含它们的文件的一部分 在实际文件中,可能有n前缀

假设我有一个以下格式的文件

prefix1: line 1
prefix1: line 2
prefix1: line 3
prefix2: line 4

prefix2: line 5
prefix3: line 6

prefix3: line 7
prefix3: line 8
prefix3: line 9
prefix3: line 10
我想把它分成三个文件,分别命名为
prefix1
prefix2
prefix3
,换行符作为完整包含它们的文件的一部分

在实际文件中,可能有
n
前缀,而不仅仅是3个。


我可以编写一个python脚本来直接实现该功能,但我想知道在
awk

中是否有一种较短的方法来实现该功能。这一行程序适用于此工作:

 awk -F: '{f=$1?$1:f; print > f}' file
以你的例子:

kent$  cat file
prefix1: line 1
prefix1: line 2
prefix1: line 3
prefix2: line 4

prefix2: line 5
prefix3: line 6

prefix3: line 7
prefix3: line 8
prefix3: line 9
prefix3: line 10

kent$  awk -F: '{f=$1?$1:f; print > f}' file

kent$  head prefix*
==> prefix1 <==
prefix1: line 1
prefix1: line 2
prefix1: line 3

==> prefix2 <==
prefix2: line 4

prefix2: line 5

==> prefix3 <==
prefix3: line 6

prefix3: line 7
prefix3: line 8
prefix3: line 9
prefix3: line 10

无论您的输入文件是否按前缀排序,此行都有效。

此行适用于作业:

 awk -F: '{f=$1?$1:f; print > f}' file
以你的例子:

kent$  cat file
prefix1: line 1
prefix1: line 2
prefix1: line 3
prefix2: line 4

prefix2: line 5
prefix3: line 6

prefix3: line 7
prefix3: line 8
prefix3: line 9
prefix3: line 10

kent$  awk -F: '{f=$1?$1:f; print > f}' file

kent$  head prefix*
==> prefix1 <==
prefix1: line 1
prefix1: line 2
prefix1: line 3

==> prefix2 <==
prefix2: line 4

prefix2: line 5

==> prefix3 <==
prefix3: line 6

prefix3: line 7
prefix3: line 8
prefix3: line 9
prefix3: line 10
无论输入文件是否按前缀排序,该行都有效