如何从 300 个文本文件中提取第 4 行?

如何从 300 个文本文件中提取第 4 行?

我有大约 300 封电子邮件(gmail),内容如下:

亲爱的 [姓名]

订单编号:123456789 购买者:[我需要的名字]

(废话又多了 26 行(总共 30 行))

我需要帮助的是如何将 gmail 的邮件本地保存为 .txt 以及如何从每个文本文件中导出第 4 行。我可以轻松运行 Replace 'Purchased by: ' 来删除它并仅保留列表中该行中的名称,但除此之外我没有任何线索

有任何想法吗?

答案1

以 MBOX 格式导出 Gmail 邮件(提示:https://support.google.com/accounts/answer/3024195?hl=en)并将其保存为 messages.txt

从以下位置获取 GNU Awk (gawk.exe)http://gnuwin32.sourceforge.net/packages/gawk.htm

将以下内容保存为 getnames.awk:

/^Order ID:.*Purchased by:/ {
  sub("^.+ by: ","");
  print;
}

将以下内容保存为 names2csv.awk:

/^Order ID:.*Purchased by:/ {
  sub("^.*Order ID:[^0-9]*","");
  sub("[^0-9]*Purchased by: ",",");
  print;
}

现在您已经获得了上述脚本和消息,这将为您提供一个文本文件形式的姓名列表:

gawk -f getnames.awk messages.txt > names.txt 

这将以 .CSV 文件格式获取订单 ID 和名称,适合在您最喜欢的电子表格软件中打开:

gawk -f names2csv.awk messages.txt > orders.csv

答案2

您可以直接从 Gmail 提取数据,解析它并使用 MsgExtract 将其保存到 Excel 表或其他格式(如 XML、CSV)。

在您的情况下,您应该定义一个 TextPart 字段并使用以下正则表达式仅提取括号 [] 之间的名称:

(?s)(?<=(by:.[))。+(?=])

例如,如果您想获取文本:“购买者:[我需要的名称]”请使用以下表达式:

(?s)已购买。+]

您可以通过以下链接了解有关 MsgExtract 中的正则表达式的更多信息:

http://docs.maildev.com/article/69-parse-email-data-using-regular-expressions

http://www.maildev.com/msgextract/

(免责声明,我是 MsgExtract 的作者)

相关内容