【发布时间】:2017-10-14 19:18:26
【问题描述】:
在工作中,我的角色正在从桌面支持转变为应用程序支持,所以这对我来说很新鲜。作为该过程的一部分,我的任务是学习 Linux 的基础知识,很快就会学习 SQL。我最好用真实的例子来学习,但我学得还不够好!
我们有一个我想为用户自动化的流程。我可以随时联系供应商,要求他们更改流程,但我正在努力充分利用这段学习时间。
我们收到一封 HTML 电子邮件,其中显示了导入过程的例外情况,用户检查表以找出组织的 ID,然后通过组织的 ID 在另一个表中查找异常。我想做的是将匹配所需的信息拆分为 CSV。我的最终目标是进行 SQL 查询以获取 .CSV 并从一个表中查找,然后从另一个表中查找,然后为他输出异常的原因。
我想坚持使用 awk,因为我已经花了几天时间试图真正把它搞定,但我知道什么?我发现其他看起来像在 VB 中执行此操作的帖子,以使该过程与 Outlook 和 Excel 集成会更好,但是当您拥有的唯一工具是锤子时...
电子邮件输入文件在 awk 中如下所示:
<strong>Request Made By: </strong>Joe Schmoe(<a href="mailto:joeschmoe@joemail.com">joeschmoe@joemail.com</a>)<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Request from: </strong>Kentucky - Highway<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Receiving Ministry:</strong> District Project<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Receiving Ministry Name:</strong> Papua New Guinea Hospital<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Intent of Gift</strong> Use funds toward building and renovating hospitals.<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Gift Type:</strong> Cash<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1">
<strong>Amount:</strong> 500.00<o:p></o:p></li></ul>
相关信息为邮箱地址、接收部门名称和金额;那些应该显示一个独特的条目。我显然不明白分组命令,所以我吹了很多。我的问题是我无法从第二次搜索(接收部门名称)中获得与第一次搜索(电子邮件地址)相同的结果。我的目标是:
joeschmoe@joemail.com,Papua New Guinea Hospital,500.00
然后为同一电子邮件中的下一个错误换行。美元输入可能有也可能没有小数。
到目前为止,这是我拼凑起来的:
#!/bin/bash
awk '/Request Made By:/' ~/emailSort/FW* | awk -F'(' '{print $2}' | awk -F'<' '{print $1}' | awk -F'\n' 'BEGIN{OFS=",";} {print $1}' > output.csv
awk '/Receiving Ministry Name:/' ~/emailSort/FW* | awk -F': ' '{print $2}' >> output.csv
awk '/Amount:/' ~/emailSort/FW* | awk -F'(' '{print $2}' >> output.csv
这是我的结果:
joeschmoe@joemail.com
Papua New Guinea Hospital
在那之后还有一些空白。 自从我被这个基本问题挂断以来,我还没有真正触及第三行。这次的文件名为FW_FTM Point To Point。
如果您不介意解释“为什么”?在任何代码或语法背后,我将不胜感激。我正在虚拟机上的 Ubuntu 17.04 的 shell 脚本中尝试此操作。
【问题讨论】: