使用awk分割文件,并使用两位数计算输出文件

使用awk分割文件,并使用两位数计算输出文件,awk,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

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

我对文件的计数也没有什么问题。新文件遵循以下编号:
part1.txt
part2.txt
part10.txt
但这会在排序文件时产生问题,因为
part10.txt
将在
part2.txt
之前排序。是否可以让文件以两位数字进行计算?

给您:

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

不需要多次测试。使用
next
跳过
@

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