我有这个文本文件
@
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
将在{{1}之前订购}}。是否可以使用两位数part2.txt
和part01.txt
来计算文件?
答案 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