2017-01-10 69 views
1

我想將一個.txt文件轉換爲.html文件,用於着色目的並通過郵件發送。 直到「MQ-FEEDs:」正如下面提到的例子所述,我纔得到正確的着色。 但其餘選定的案例會被打印兩次,第二次被着色(例如: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