linux - 拆分分隔符的第二次出现

标签 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) 总是包含一个空行,没有其他内容。
此外,源文件不是以空行开头,也没有任何内容(之前已将其删除)。

有人可以帮忙吗?

最佳答案

我不会玩 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/

相关文章:

linux - 如何让一个进程中只有一个或多个线程停止消耗CPU资源?

c - 像树命令一样打印行

bash - awk 循环覆盖文件

python - Linux中如何将一行数据复制到接下来N行的最后一列?

java - 用正则表达式分割字符串

linux - 将数据从一个安装迁移到另一个安装

php - linux:解压缩存档时将文件名中的空格转换为下划线

linux - 如何在shell脚本生成的文件顶部写标题

python - 如果有正向前瞻和正向后向但没有定界符,我该如何拆分字符串?

c++ - QRegExp 未按预期运行