【发布时间】:2017-03-13 02:18:30
【问题描述】:
我需要在我的公司管理 smtp 日志文件处理。
这些日志文件需要导入到 MSSQL,所以提供这些数据是我的工作。
我收到带有“;”的奇怪未投递消息在字符串中,我需要用逗号替换它。
所以我得到了什么:
Sender;Recipient;Operation;Answer;Error;Servername
bla@bla.com;rockit@sohard.com;RCPT TO;450;+4.2.0+<rockit@sohard.com>:+Recipient+address+rejected:+Policy+restrictions;+try+later;M0641
提及“;”在“限制”之后的答案字段中,不知道为什么邮件服务器发送分号,也许是为了惹恼我:P
经过大量研究后,我尝试使用 awk 进行跟踪:
awk 'BEGIN{FS=OFS=";"} {for (i=5;i<=NF;i++) gsub (";",",",$i)} 1' myfile.csv
这个命令确实有效,但它似乎对我的文件没有任何作用,“;”在错误字段中仍然存在。我在这里缺少什么?
【问题讨论】:
-
由于分号被设置为您的分隔符,awk 毫不奇怪地将其视为分隔符。因此,您的脚本将无法找到要替换的独立分号。您需要一种不同的方法...
-
不,您的命令不起作用。怎么可能?您将每一行拆分为每个
';的字段,然后要求它用,替换每个;within 每个字段,但 在任何字段中都没有;s字段,因为您将输入拆分为;s。脚本如何知道;何时位于字段内而不是字段之间? -
我猜是这样的 :) 稍后我会尝试 Johns 的解决方案,看起来不错。