![](/img/trans.png)
[英]One liner awk html tag replace “''>” with “''> ” with gsub
[英]gsub function in awk for coloring characters in unix?
我有一個生成output.txt文件的腳本,在該腳本中有4列,如下所示。
Filename Date Space status
xyz.txt Nov18 3.8M On_time
mnp.txt Nov11 8.7M Delayed
pqr.csv Nov16 9.0M No_records
我正在通過自動郵件發送輸出文件,我想給狀態字段添加顏色,例如(如果狀態為“延遲”,則分別為紅色,打開時間,綠色和無記錄,然后為黃色)。
首先,我將output.txt文件轉換為output.html,這很完美,並且我可以更改背景和文本顏色,但是無法更改Delay,On_time和n0_records的顏色。 請找到下面的代碼。
awk 'BEGIN { print "<html>"
print "<head>"
print "</head>"
print "<body bgcolor=\"#00ffff\" text=\"#0000FF\">"
print "<pre>"
}
{
gsub(/Fund name/,"<b>Fund name</b>")
gsub(/1234/,"<b>1234</b>")
print $0
}
END{ print "</pre>"
print "</body>"
print "</html>"
}
' ${PATH1}/output.txt > ${PATH1}/output.html
# Send mail (uses SENDMAIL)
(
echo "From: Me <me@somewhere>"
echo "To: You <MPAYAL@StateStreet.com>"
echo "Cc: Someone Else <someoneo@somewhere>"
echo "Subject: Message Title"
echo "MIME-Version: 1.0"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
echo
echo "<pre>Any text here</pre>"
echo
cat ${PATH1}/output.html
echo
) | /usr/sbin/sendmail "$EMAILTO"
您能幫我這個忙嗎,我想我要留下一些gsub字段了。
awk 'BEGIN {
print "<html>" \
"<body bgcolor=\"#333\" text=\"#f3f3f3\">" \
"<pre>"
}
NR == 1 { print $0 }
NR > 1 {
if ($NF == "Delayed") color="red"
else if ($NF == "On_time") color="green"
else if ($NF == "No_records") color="yellow"
else color="#f0f0f0"
$NF="<span style=\"color:" color "\">" $NF "</span>"
print $0
}
END {
print "</pre>" \
"</body>" \
"</html>"
}
' output.txt > output.html
輸出量
<html><body bgcolor="#333" text="#f3f3f3"><pre> Filename Date Space status xyz.txt Nov18 3.8M <span style="color:green">On_time</span> mnp.txt Nov11 8.7M <span style="color:red">Delayed</span> pqr.csv Nov16 9.0M <span style="color:yellow">No_records</span> </pre></body></html>
因此,只要您對字段值進行操作,就不需要gsub
。 AWK為第n 個字段提供$n
變量,其中n
是一個正整數。 只需通過引用$n
變量來比較字段值。
另外,在上述我已經使用了碼$NF
為第 4列(字段的數量$NF
等於4,特別是)。 第一行( NR == 1
)按原樣打印。 對於行(其余NR > 1
)時,代碼根據其值改變了第 4列。
不是完整的重寫,而是您缺少的部分
$ awk 'BEGIN{color["On_time"]="green";
color["Delayed"]="red";
color["No_records"]="yellow"}
$4 in color{$4="<.. color=\""color[$4]"\">" $4 "</..>"}1' file
Filename Date Space status
xyz.txt Nov18 3.8M <.. color="green">On_time</..>
mnp.txt Nov11 8.7M <.. color="red">Delayed</..>
pqr.csv Nov16 9.0M <.. color="yellow">No_records</..>
這不是一個完整的答案,因此請不要接受,它只是對@RuslanOsmanov答案的建議改進,它基於@karakfa的建議,即使用哈希查找而不是一系列if-els來確定要使用的顏色(與@karakfa的建議,它顯示了如何在映射數組中包括默認值):
$ cat tst.awk
BEGIN {
split("red green yellow",colors); colors[""] = "#f0f0f0"
split("Delayed On_time No_records",t); for (i in t) cidx[t[i]]=i
}
{
$NF = sprintf("<span style=\"color:%s\">%s</span>", colors[cidx[$NF]], $NF)
print
}
$ awk -f tst.awk file
Filename Date Space <span style="color:#f0f0f0">status</span>
xyz.txt Nov18 3.8M <span style="color:green">On_time</span>
mnp.txt Nov11 8.7M <span style="color:red">Delayed</span>
pqr.csv Nov16 9.0M <span style="color:yellow">No_records</span>
如果輸入文件很大,這將提高腳本效率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.