2013-04-17 26 views
0

假設我有一個具有以下格式的文件。基於普通線路前綴將文件分割爲多個文件

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

回答

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足夠大,上面的awk行可能會失敗,如「打開太多文件」。爲了解決它,我們可以在寫入/附加文本後關閉文件。

也就是說,行可能是:

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

這一行工作,無論你輸入文件由前綴或不排序。

相關問題