使用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