2013-12-14 75 views
1

我有這個文本文件分割文件使用awk numerating輸出文件有兩位數

@ 
text text text 

text text text 
@ 
text text text 
@ 
text text text text 
text text text 

text text text 

,我可以在多個文件@

awk '/@/{n++;close(filename)}{filename = "part" n ".txt"; print >filename }' text.txt 

還是拆分我想改善命令所以要避免將@作爲每個新文件的第一行:我希望每個文件的第一行直接是text text text

另外我有幾個問題與文件的計數。新文件的編號如下:part1.txt,part2.txt,...,part10.txt但這會在訂購文件時產生問題,因爲part10.txt將在part2.txt之前訂購。是否有可能使用兩位數part01.txtpart02.txt來計算文件?

回答

1

在這裏你去:

awk '/@/{n++;close(filename)} !/@/{filename = sprintf("part%02d.txt", n); print >filename; }' text.txt 

還是有點更清潔,更嚴格的模式匹配和不重複的模式:

awk '{ if ($0 == "@") {n++;close(filename)} else {filename = sprintf("part%02d.txt", n); print >filename; }}' text.txt 
1

不需要測試不止一次。使用next跳過@行。

awk '/^@$/{n++;close(filename);next} {print >sprintf("part%02d.txt", n)}' text.txt