gpt4 book ai didi

awk - 如何使用 awk 或 grep 从标题中提取电子邮件字段

转载 作者:行者123 更新时间:2023-12-05 01:14:57 25 4
gpt4 key购买 nike

关于:邮箱(mbox 格式)电子邮件

多消息文件: Inbox.mbox

From - Thu Mar 26 16:16:21 2015
From: Mail Delivery System <Mailer-Daemon@200.netwizz.com>
To: edge@notterribe.org
Subject: Mail delivery failed: returning message to sender
Message-Id: <E1Yb3yX-0004CB-QH@200.netwizz.com>
Date: Thu, 26 Mar 2015 02:21:17 -0700
Date: Thu, 26 Mar 2015 02:20:44 -0700
From: edge <edge@notterribe.org>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.5.0
MIME-Version: 1.0
To: leasing@theedgehenderson.com
CC: etpmgr@movein.net, t.simmonds@movein.ne
Subject: Fwd: Today's Breach Of Our Security.
From - Fri Mar 27 12:00:00 2015

所需的模式匹配顺序;

Date: Thu, 26 Mar 2015 02:21:17 -0700  
From - Thu Mar 26 16:16:21 2015
From: Mail Delivery System <Mailer-Daemon@200.netwizz.com>
To: edge@notterribe.org
Message-Id: &lt;E1Yb3yX-0004CB-QH@200.netwizz.com>
Subject: Mail delivery failed: returning message to sender

期望的最终结果;

Date: Thu; 26 Mar 2015 02:21:17 -0700;From - Thu Mar 26 16:16:21 2015;From: Mail Delivery System <Mailer-Daemon@200.netwizz.com>;To: edge@notterribe.org;Message-Id: &lt;E1Yb3yX-0004CB-QH@200.netwizz.com>;Subject: Mail delivery failed: returning message to sender

目标;
* “Inbox.mbox”中的每封邮件消息都以“发件人”开头
* 仅匹配“^Date: |^From |^From: |^To: |^Message-Id: |^Subject:”的第一次出现,打印该行。
* 以分号分隔的 csv 格式输出结果

我试过了;
grep -a -E -i "^Date: |^From |^From: |^To: |^Message-ID: |^Subject: " Inbox.mbox<br/>
awk '/^Date: / || /^From / || /^From: / || /^To: / || /^Message-ID: / || /^Subject: /' Inbox.mbox

评论:以上内容给了我一个良好的开端,我最熟悉 awk 和 grep,所以我尝试只使用它们。难以按我希望的顺序打印出行,匹配第一次出现仅以换行符结尾。某些消息中存在二进制数据,因此我将 -a 与 grep 一起使用。

如有任何帮助,我们将不胜感激。
谢谢。

最佳答案

好的,所以您只有 Thunderbird mbox。

这是我的想法,在名为 mbox2csv 的文件中:

#!/usr/bin/gawk -f
BEGIN {
# initialize an array and set the "i" variable to 0
i = split("", row, ":");
}

# awk does not have a "join"
function join(array, sep) {
sep = sep ? sep : ";";
result = array[0];
for (i=1; i<length(array); ++i) {
result = result sep array[i];
}
return result;
}

# the keys you want to store
/^(From|Date|To|Message-ID|Subject):/ {
row[i++] = $0;
}

# every time we match a mbox message separator
/^From /{
# if there is data (not the first line)
if (length(row) > 1) {
print join(row);
# reinitialise the array and "i"
i = split("", row, ":");
}
}

然后:mbox2csv INBOX > result.csv

重要警告:*这没有考虑互联网 header 中常见的行延续,也没有考虑转义行。

编辑代码将在gist

关于awk - 如何使用 awk 或 grep 从标题中提取电子邮件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com