使用带有两位数的awk编号输出文件来拆分文件

时间:2013-12-14 07:11:34

标签: awk

我有这个文本文件

@
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.txtpart2.txt,...,part10.txt,但这会在订购文件时产生问题,因为part10.txt将在{{1}之前订购}}。是否可以使用两位数part2.txtpart01.txt来计算文件?

2 个答案:

答案 0 :(得分: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 :(得分:1)

无需多次测试。使用next跳过@行。

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