2017-01-10 9 views
1

色分けしてメールで送信するために、.txtファイルを.htmlファイルに変換しようとしています。 以下の例のように "MQ-FEEDs:"まで適切な色付けをしています。 しかし、選択されたケースの残りの部分が2回印刷され、2回目に色付けされました(例:FAILED FAILED(赤))。awkコマンドで色付けを実装してメールで送信する方法は?

レポート:

|DATE | FEED NAMEs AS OF NOW   | AVG_TIME| ARR_TIME |SIZE(MB)|COUNT|STATUS | 
Jan 6 CHCK09_20170106.txt    20:46  21:15 0.180 1430 DELAYED 
Jan 6 EGLOUT_xml_20170106.txt   15:46  15:46 0.008 247  On_Time 
Jan 9 MTS_SOD_20170106.TXT    07:05  00:06 4.005 1  No_Records  
MQ-FEEDs:  
Jan 09 03:39 MTS_TRANSACTION_FEED  MQ 1 3719238761373 SUCCESS SUCCESS  
Jan 09 03:37 HOGAN_TRANSACTION_FEED MQ 1 3719235506904 FAILED FAILED  
MANUAL-UPLOAD-FEEDs:                MANUAL-UPLOAD-FEEDs: 
DB-POOL-FEEDs:                 DB-POOL-FEEDs:  
NOTE : Feednames starting with PLUS sign(+) indicates they are in INPROGRESS Directory. 
    DELAYING-FILES-ARE            DELAYING-FILES-ARE 

コード:

#!/bin/ksh 
export PATH1="/auto/users/scripts" 

awk 'BEGIN { 
    print "<html>" \ 
    "<body bgcolor=\"#DEF3F0\" text=\"#003abc\">" \ 
    "<pre>" 
} 

NR == 0 { print $0 } 
NR > 0 { 
    if  ($NF == "DELAYED")  {color="red"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "On_Time")  {color="green"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "SUCCESS")  {color="green"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "FAILED")  {color="red"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "MQ-FEEDs:")  {color="magenta"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "MANUAL-UPLOAD-FEEDs:")  {color="magenta"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "DB-POOL-FEEDs:")  {color="magenta"; bold=1; size="15px"; italic=0;} 
    else if ($NF == "No_Records") {color="blueviolet"; bold=0; size="20px"; italic=1;} 
    else if ($NF == "DELAYING-FILES-ARE")   {color="red"; bold=1; size="25px"; italic=0;} 
    else       {color="#003abc"; bold=0; size="25px"; italic=0;} 

    Dummy=$0 
    sub("[^ ]+$","",Dummy) 
    print Dummy "<span style=\"color:" color (bold ? ";font-weight:bold" : "")(size ? ";font-size:size" : "") (italic ? ";font-style:italic" : "") "\">" $NF "</span>" 
} 

END { 
    print "</pre>" \ 
    "</body>" \ 
    "</html>" 
} 
' output.txt > output.html 

mail -s "$(echo -e "This is Subject\nContent-Type: text/html")" [email protected] < output.html 
+1

[重複質問?](http://stackoverflow.com/questions/41209524/how-html-works-in-awk-command-in-shell-scripting/41220695#comment69651072_41220695) – Jdamian

+0

@Jdamian、こんにちは、この質問は別の質問のようなものですが、ここでの要件は少し異なります。 – user7268185

+0

@Jdamian、これで私を助けてくれますか? – user7268185

答えて

1

あなたが倍増取得出力のために少し調整が必要と私は取得しています

出力。

LASTFIELD=$NF  
    Dummy=$0 
    gsub("[\t ]+$","",Dummy) 
    gsub("[^ ]+$","",Dummy) 
    print Dummy"<span style=\"color:" color (bold ? ";font-weight:bold" : "")(size ? ";font-size:size" : "") (italic ? ";font-style:italic" : "") "\">"LASTFIELD"</span>" 
+0

こんにちは、それは私のために働いているが、それはスペースを削除している(順次ではない)ので、私は特定のスペースギャップで自分の出力を得ていない。 これで私を助けてくれますか? – user7268185

+0

同じ間隔で表示される私の答えを編集しました。 – sureshraju

+0

こんにちは、ありがとう、それは完全に動作していた。 – user7268185

関連する問題