【问题标题】:Parse email to unique text将电子邮件解析为唯一文本
【发布时间】:2012-04-06 07:00:07
【问题描述】:

我有一个 mbox 格式的大邮箱。都是文章,所以标题信息不相关(日期除外)。

我想要的是获取我的大 *.mbx 文件并生成文本文件,其中文件名是每封电子邮件的主题,并且所有标题都被删除。

我认为 AWK 可以用正则表达式做到这一点,但这种事情不是我的专业领域(更多的是 gui 人)。

我希望我可以将硬盘上的文件保存在更少的磁盘空间中,并最终可以使用 Google 桌面搜索进行索引。

任何帮助表示赞赏。

【问题讨论】:

    标签: email indexing awk mbox


    【解决方案1】:

    这里的关键是将记录分隔符变量设置为空字符串。这将以“段落”模式读取文件。

    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
    

    如果您有相同主题的电子邮件,邮件正文将连接到一个文件中。

    我不希望看到这会节省大量磁盘使用量。您将删除标头,但会增加所需的磁盘块数。

    【讨论】:

    • 感谢您的快速响应。我将您的脚本保存为 script.sh 并尝试使用 awk -f script.sh 运行它,它返回了一个语法错误,其中一个 ^ 指向空字符串之前的等号。 (在 RS="" 它指向 =)你能告诉我我做错了什么吗?我将 Gawk 用于 Windows,因为我只有 Windows 7 笔记本电脑可用。再次感谢!
    • 在这种情况下,删除 -v RS="" 选项并将 BEGIN{RS=""} 放入 awk 脚本中。 Windows 命令提示符可能会弄乱它。
    • 如果你想在 windows 机器上使用 unixy 命令,请查看 cygwin.com
    • 我按照你说的方式再次尝试了脚本,它给出了相同的语法错误,我在 cygwin 上尝试了同样的事情。也许它在cygwin或windows中不起作用?无论如何,我将尝试使用 Windows 程序来执行此操作。感谢您的帮助,非常感谢。
    • 如果您将整个 sn-p 保存为 script.sh,您应该以 sh script.sh(而不是 awk -f script.sh)运行它,因为这是一个调用 awk 的 shell 脚本。您提到的错误看起来像调用脚本的方式是问题。
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2018-12-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多