bash - 按包含特定字符的行将大文本文件拆分为块
问题描述
我正在尝试将一个大文本文件(~27 Gb)分块成一系列较小的文件,其中断点由一个子标题定义,每个子标题都包含相同的符号(在本例中为“@”)。
所以下面的大文件:
@auniquestring
dataline1
dataline2
...
dataline33456
@aseconduniquestring
dataline33458
dataline33459
...
dataline124589
@athirdunqiuestring
dataline124591
dataline124592
...
...变成:
第一个文件:
@auniquestring
dataline1
dataline2
...
dataline33456
第二个文件:
@aseconduniquestring
dataline33458
dataline33459
...
dataline124589
第三个文件:
@athirdunqiuestring
dataline124591
dataline124592
...
ETC
我已经尝试过类似的东西,sed -n '/@/,/@/p' myfile
但它会立即输出所有内容,并且错过了所有其他子标题的内容。任何帮助将非常感激
解决方案
使用 awk(注意它会创建 NAMED 文件file[0-9]+.txt
):
$ awk '
BEGIN {
file="file0.txt" # just in case
}
/^@/ { # when record starts with @
close(file) # close previous file
file=sprintf("file%d.txt",++f) # generate next filename
}
{
print > file # output to generated filename
}' file
样本输出:
$ cat file1.txt
@auniquestring
dataline1
dataline2
...
dataline33456
推荐阅读
- c# - 棋盘游戏的 int 数组
- pine-script - 在 pinescript 警报中,有什么方法可以检测图表的时间范围,然后根据它发送警报?
- python - 在 Docker 上使用 parsedmarc 分析和可视化 DMARC 结果
- jwt - JWT 第三方应用程序声明未出现在 Cognito accessToken 中
- python - Qt Designer 和 Python 在单独的 functions.py 中运行一个函数
- asp.net - 如何将类名或样式名添加到使用 SQL 'FOR XML' 生成的 HTML 标记中
- express - Sendgrid Next.js - React.js 和 Express.js - 获取数据的问题
- java - JxBrowser Java,Gradle 问题
- client-server - 关于“向后/向前兼容性”的语义
- javascript - 如果在函数中也修改了状态,则去抖动不起作用