加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何将文件拆分为由关键字定义的块

发布时间:2020-12-16 01:48:55 所属栏目:安全 来源:网络整理
导读:假设我有一个大文本文件,例如: variableStep chrom=chr1sometext1sometext1sometext1variableStep chrom=chr2sometext2variableStep chrom=chr3sometext3sometext3sometext3sometext3 我想将此文件拆分为3个文件: 文件1包含内容 sometext1sometext1sometex
假设我有一个大文本文件,例如:

variableStep chrom=chr1
sometext1
sometext1
sometext1
variableStep chrom=chr2
sometext2
variableStep chrom=chr3
sometext3
sometext3
sometext3
sometext3

我想将此文件拆分为3个文件:
文件1包含内容

sometext1
sometext1
sometext2

文件2有内容

sometext2

和文件3有内容

sometext3
sometext3
sometext3
sometext3

注意,“sometext1”“sometext2”“sometext3”都没有“variableStep”这个词.

我可以在python中执行此操作,只需遍历行并打开一个新的文件句柄,并在每次遇到行中的“variableStep”时将后续行写入其中,但是,我想知道是否可以在命令行.
请注意,真实文件很大(多个Gbs,因此一次读取所有内容将是不可行的).

谢谢

解决方法

这将创建具有所需内容的file1,file2等:

awk '/variableStep/{close(f); f="file" ++c;next} {print>f;}' file

这个怎么运作

> / variableStep / {close(f); f =“file”c; next}

每当我们到达包含variableStep的行时,我们关闭最后使用的文件,将f分配给下一个要使用的文件的名称,然后跳过其余的命令并跳转到下一行.

c是一个告诉我们当前文件编号的计数器.每次创建新文件名时都会增加.
>打印> f

对于所有其他行,我们将它们打印到根据变量f的值命名的文件中.

由于这会逐行处理文件,因此即使对于海量文件也应该是合适的.

第一个输出文件如下所示:

$cat file1
sometext1
sometext1
sometext1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读