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
无论输入文件是否按前缀排序,该行都有效