我有一个大约400mb的邮箱转储.我想把它分成两部分.txt文件,每个文件中包含一封邮件.每封邮箱都以指定doctype的标准HTML标题开头.

这意味着我将不得不根据上述标题拆分文件.在linux中我该怎么做?

推荐答案

如果你有mail.txt

$ cat mail.txt
<html>
    mail A
</html>

<html>
    mail B
</html>

<html>
    mail C
</html>

csplit分到<html>

$ csplit mail.txt '/^<html>$/' '{*}'

 - mail.txt    => input file
 - /^<html>$/  => pattern match every `<html>` line
 - {*}         => repeat the previous pattern as many times as possible

判断输出

$ ls
mail.txt  xx00  xx01  xx02  xx03

如果你想在awk分钟内完成

$ awk '/<html>/{filename=NR".txt"}; {print >filename}' mail.txt
$ ls
1.txt  5.txt  9.txt  mail.txt

Linux相关问答推荐

将UTC字符串日期时间转换为毫秒UTC时间戳

Linux内核中维护进程无关寄存器失败

如何判断程序是在终端上运行还是在后台运行?

从一个文件中读取文件名并将文件名和内容存储到另一个带有|的文件中作为分隔符

使用 ansible 验证 firewalld 配置

删除 csv 列中的不匹配值

Ubuntu 20 不支持 MAP_FIXED_NOREPLACE

如何使用awk或其他方法提取双引号中的子字符串?

Linux合并文件

内核是如何工作的?

anon 对 pmap 意味着什么?

用于判断进程是否正在运行并对结果采取行动的 Linux 脚本

GLIBCXX 版本

yum 可以告诉我哪些存储库提供了特定的包吗?

试运行 cron 条目

从命令行导入 PostgreSQL CSV

如何获取 GNU Makefile 中使用的 shell 命令的退出状态?

如何停止 Linux 上的不间断进程?

Ionic android 构建错误 - 找不到ANDROID_HOME环境变量

Bash:等待超时