我正在尝试使用 awk 每隔两次出现分隔符就拆分一个文件,但我总是在开头以一个空文件结束,我不明白为什么。
我需要分解成多个文件的数据格式类似这样:
----------
aaa
bbb
----------
ccc
ddd
----------
eee
fff
----------
ggg
第一个生成的文件应包含:
----------
aaa
bbb
----------
ccc
ddd
分隔符始终相同(10 次“减号”)。
我现在正在尝试这样做:
awk -v RS='[-]{10}' '{i++} {file = sprintf("temp-%s", int(i/2)); print >> file;}'
然而,我得到的第一个文件 (temp-0) 总是包含一个空行,没有其他内容。
此外,源文件不是以空行开头,也没有任何内容(之前已将其删除)。
有人可以帮忙吗?
最佳答案
我不会玩 RS
对于这个问题。你可以算出---------
决定是否必须增加文件索引。试试这一行:
awk '/^--*$/{c++;f+=c%2?1:0}{print > "temp-"f}' file
请注意,上面的行让您了解了如何处理行和文件索引。如果你的文件很大,你需要 close()
文件并使用 >>
再次重定向,否则你会得到像too many opened files
这样的错误.
关于linux - 拆分分隔符的第二次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155147/