分割每隔第二个分隔符

时间:2018-09-03 19:09:59

标签: linux awk split

我正在尝试使用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)始终包含一个空行,没有其他内容。
另外,源文件也不以空行开头,也没有内容(它们已在以前被删除)。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

对于这个问题,我不会和RS一起玩。您可以计算---------来决定是否必须增加文件索引。试试这一行:

awk '/^--*$/{c++;f+=c%2?1:0}{print > "temp-"f}' file

请注意,以上行为您提供了如何处理行和文件索引的想法。如果文件很大,则需要close()文件,然后使用>>进行重定向,否则会出现类似too many opened files的错误。