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

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

我想将其分为三个文件,名称分别为prefix1prefix2prefix3 ,而换行符则完整地保留在其中一个包含它们的文件中。

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

我可以编写一个python脚本直接实现该功能,但是我想知道在awk是否有更短的方法来实现它。

===============>>#1 票数:3 已采纳

这种单线工作的工作:

 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

您提到了n个前缀。 如果N足够大,则上面的awk行可能会因“打开太多文件”而失败。 为了解决这个问题,我们可以在向其中写入/添加文本后关闭文件。

也就是说,该行可能是:

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

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

  ask by merlin2011 translate from so

未解决问题?本站智能推荐: