簡體   English   中英

將Sendmail日志文件加載到pandas

[英]Load Sendmail log files to pandas

我需要分析很多很長的Sendmail日志文件,其中一些是gzip,我正在嘗試使用pandas,

這些行的格式如下:

    2019-02-04T17:41:06.957332-08:00 server1 sendmail[1945]: x151f6Ng001945: from=<xxxxxxxxx@domain1.com>, size=20946, class=0, nrcpts=1, msgid=<ZZZZZZZZZZZ>, proto=SMTP, daemon=MTA, tls_verify=NONE, auth=NONE, relay=server1 [127.0.0.1]
    2019-02-04T17:41:06.990091-08:00 server1 sendmail[1955]: x151f6Ng001945: to=<xxxxxxxxx@domain2.com>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, tls_verify=NONE, pri=140946, relay=server2. [IP_2], dsn=2.0.0, stat=Sent (Ok: queued as 43tnNL6jtyz6p3vf)

第一列,日期服務器用空格分隔,但是行的其余部分用“,”(逗號空格)分隔,字段數是可變的,我的想法是按空格分隔列,並且最后一個字段后來搜索特定文本,以創建新列,

我嘗試使用sep=r',(?!\\s)'不要使用逗號空格作為分隔符,但不起作用

一些想法

一種方法如下:在命令行上使用sed將數據分成5列。

sed -es/" "/", "/1 test.txt | sed -es/" "/", "/2 | sed -es/" "/", "/3 | sed -es/" "/", "/4 | sed -es/" "/"\\""/5 | sed -es/$/\\"/ > test_5cols.csv

這會將逗號放在前4個空格中。 第5列中的其他數據都是“混合”的,並且順序不同。

2019-02-04T17:41:06.957332-08:00, server1, sendmail[1945]:, x151f6Ng001945:, from=<xxxxxxxxx@domain1.com>,"size=20946, class=0, nrcpts=1, msgid=<ZZZZZZZZZZZ>, proto=SMTP, daemon=MTA, tls_verify=NONE, auth=NONE, relay=server1 [127.0.0.1]"
2019-02-04T17:41:06.990091-08:00, server1, sendmail[1955]:, x151f6Ng001945:, to=<xxxxxxxxx@domain2.com>,"delay=00:00:00, xdelay=00:00:00, mailer=esmtp, tls_verify=NONE, pri=140946, relay=server2. [IP_2], dsn=2.0.0, stat=Sent (Ok: queued as 43tnNL6jtyz6p3vf)"

然后,您可以使用pandas read_csv將其拉入df,然后重命名列。

最后,我在數據集中逐行加載文件並創建新列,提取我需要的特定字段,read_csv選項更容易

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM