根据内容拆分linux中的文件

Gre*_*orn 42 linux bash awk sed file

我有一个约400mb的电子邮件转储.我想将其拆分为.txt文件,每个文件中包含一封邮件.每封电子邮件都以指定doctype的标准HTML标头开头.

这意味着我将不得不根据上述标题拆分我的文件.我如何在linux中进行操作?

kev*_*kev 73

如果你有 mail.txt

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

<html>
    mail B
</html>

<html>
    mail C
</html>
Run Code Online (Sandbox Code Playgroud)

跑去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
Run Code Online (Sandbox Code Playgroud)

检查输出

$ ls
mail.txt  xx00  xx01  xx02  xx03
Run Code Online (Sandbox Code Playgroud)

如果你想要的话 awk

$ awk '/<html>/{filename=NR".txt"}; {print >filename}' mail.txt
$ ls
1.txt  5.txt  9.txt  mail.txt
Run Code Online (Sandbox Code Playgroud)