【发布时间】:2012-04-06 07:00:07
【问题描述】:
我有一个 mbox 格式的大邮箱。都是文章,所以标题信息不相关(日期除外)。
我想要的是获取我的大 *.mbx 文件并生成文本文件,其中文件名是每封电子邮件的主题,并且所有标题都被删除。
我认为 AWK 可以用正则表达式做到这一点,但这种事情不是我的专业领域(更多的是 gui 人)。
我希望我可以将硬盘上的文件保存在更少的磁盘空间中,并最终可以使用 Google 桌面搜索进行索引。
任何帮助表示赞赏。
【问题讨论】:
我有一个 mbox 格式的大邮箱。都是文章,所以标题信息不相关(日期除外)。
我想要的是获取我的大 *.mbx 文件并生成文本文件,其中文件名是每封电子邮件的主题,并且所有标题都被删除。
我认为 AWK 可以用正则表达式做到这一点,但这种事情不是我的专业领域(更多的是 gui 人)。
我希望我可以将硬盘上的文件保存在更少的磁盘空间中,并最终可以使用 Google 桌面搜索进行索引。
任何帮助表示赞赏。
【问题讨论】:
这里的关键是将记录分隔符变量设置为空字符串。这将以“段落”模式读取文件。
awk -v RS="" '
/^From / {
# this $0 contains the email headers, grab the subject
subject = "no subject"
split($0, headers, /\n/)
for (idx in headers)
if (headers[idx] ~ /^Subject: /) {
subject = headers[idx]
sub(/^Subject: /, "", subject)
}
next
}
{ print > subject}
' large.mbox
如果您有相同主题的电子邮件,邮件正文将连接到一个文件中。
我不希望看到这会节省大量磁盘使用量。您将删除标头,但会增加所需的磁盘块数。
【讨论】:
-v RS="" 选项并将 BEGIN{RS=""} 放入 awk 脚本中。 Windows 命令提示符可能会弄乱它。
sh script.sh(而不是 awk -f script.sh)运行它,因为这是一个调用 awk 的 shell 脚本。您提到的错误看起来像调用脚本的方式是问题。