出力

出力

入力ファイル

Mar 21 13:25:04 ip-172-2-0-53 sendmail[5857]: v2LKMUDq005855: to=<[email protected]>,<[email protected]>, delay=00:02:34, xdelay=00:02:34, mailer=esmtp, pri=151745, relay=icadmed-com.mail.p...ction.googlemail.com. [xxx.xx.xxx.xxx], dsn=2.0.0, stat=Sent (<[email protected]> [InternalId=76295799050449, Hostname=BY1PR0701MB1752.namprd07.prod.gmail.com] 8962 bytes in 0.961, 9.102 KB/sec Queued mail for delivery)
Mar 21 11:34:55 ip-172-2-0-53 sendmail[5478]: v2LIXc00005476: to=<[email protected]>, delay=00:01:17, xdelay=00:01:17, mailer=esmtp, pri=120883, relay=gmail-com.mail.p...ction.googlemail.com. [xxx.xx.xxx.xx], dsn=2.0.0, stat=Sent (<[email protected]> [InternalId=79285096289546, Hostname=CY1PR07MB1448.namprd07.prod.googlemail.com] 8049 bytes in 0.226, 34.732 KB/sec Queued mail for delivery)
Mar 20 13:45:16 ip-172-2-0-53 sendmail[1295]: v2KKfjCN001293: to=<[email protected]>, delay=00:03:31, xdelay=00:03:31, mailer=esmtp, pri=120883, relay=mta5.am0.yahoodns.net. [xx.xxx.xx.xx], dsn=2.0.0, stat=Sent (ok dirdel)
Mar 20 08:54:57 ip-172-2-0-53 sendmail[32712]: v2KFss7V032710: to=<[email protected]>, delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=120892, relay=mx4.hotmail.com. [xxx.xxx.xx.xxx], dsn=2.0.0, stat=Sent ( <[email protected]> Queued mail for delivery)

1分以上の遅延が検出された各行の推定出力

sendmail[5857]: delay=00:02:34 Hostname=BY1PR0701MB1752.namprd07.prod.gmail.com]
sendmail[5478]: delay=00:01:17 Hostname=CY1PR07MB1448.namprd07.prod.googlemail.com]
sendmail[1295]: delay=00:03:31

シェルスクリプトを使用してこの問題をどのように解決できますか?

ベストアンサー1

これはもはやsedオプションではありません。文字列から時間を解析する00:01:00か、60秒以上を計算する必要があります00:10:0001:00:07

awkファイルを思いついた

 { result = "" ;
   for (i=1;i<=NF;i++) {
     if ( $i ~ /^delay=/ ) {
       s=split(substr($i,6) ,A,":") ;
       t=60*A[1]+A[2] ;
       #printf "%2d : %d mn (60x%s+%s) : %s\n",i,t,A[1],A[2],$i ;
       if ( !t  ) next ;
       result = $i ;
     }
     if ( $i ~ /^Hostname/ ) result = result $i ;

  }
  if ( result != "" ) print result ;
}

いくつかのヒント:

  • ( $i ~ /^foo/ )i番目のフィールドをfoo(^:パターンの先頭)と一致させます。
  • split(substr($i,6) ,A,":")配列AのH:M:S部分分割
  • A = B C:文字列BとCをAに連結します。

今日の例は(uはファイル名、u.awkawkプログラムを保存するファイルです)

 awk -f u.awk u
delay=00:02:34, Hostname=BY1PR0701MB1752.namprd07.prod.gmail.com]
delay=00:01:17, Hostname=CY1PR07MB1448.namprd07.prod.googlemail.com]
delay=00:03:31,

おすすめ記事