Конвертировать CSV с заголовками в HTML в Bash - PullRequest
1 голос
/ 12 марта 2019

У меня есть данные, как показано ниже в CSV-файле

ServerName,Index,Status
10.xxx.xx.xx,1.5.1.1,2
10.xxx.xx.xx,1.5.1.2,3

Мне нужно преобразовать эти данные в HTML, а также раскрасить строку, если значение «Status» равно 3/4/5 ..пожалуйста, помогите мне в этом.попробовал ниже

    awk 'BEGIN{
FS=","
print  "<HTML>""<TABLE border="1"><TH>JOB_NAME</TH><TH>RUN_DATE</TH><TH>STATUS</TH>"
}
 {
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
 }
END{
print "</TABLE></BODY></HTML>"
 }
' 10.106.40.45_FinalData.csv > file.html
sed -i "s/2/<font color="green">2<\/font>/g;s/4/<font color="red">4<\/font>/g;s/5/<font color="red">5<\/font>/g;" file.html

в последнем коде, который я пробовал, мне нужно проверить только значение столбца состояния и нужно покрасить ячейку.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019
$ cat tst.awk
BEGIN{
    FS = ","
    colors[3] = "red"
    colors[4] = "green"
    colors[5] = "blue"

    print "<HTML><BODY>"
    print "<TABLE border=\"1\">"
    print "<TR><TH>JOB_NAME</TH><TH>RUN_DATE</TH><TH>STATUS</TH></TR>"
}
NR>1 {
    printf "<TR>"
    for (i=1; i<=NF; i++) {
        if ( (i == NF) && ($i in colors) ) {
            on  = "<font color=\"" colors[$i] "\">"
            off = "</font>"
        }
        else {
            on = off = ""
        }
        printf "<TD>%s%s%s</TD>", on, $i, off
    }
    print "</TR>"
}
END {
    print "</TABLE>"
    print "</BODY></HTML>"
}

.

$ awk -f tst.awk file
<HTML><BODY>
<TABLE border="1">
<TR><TH>JOB_NAME</TH><TH>RUN_DATE</TH><TH>STATUS</TH></TR>
<TR><TD>10.xxx.xx.xx</TD><TD>1.5.1.1</TD><TD>2</TD></TR>
<TR><TD>10.xxx.xx.xx</TD><TD>1.5.1.2</TD><TD><font color="red">3</font></TD></TR>
</TABLE>
</BODY></HTML>
0 голосов
/ 12 марта 2019

Вы на самом деле не говорите, в чем проблема, но я предполагаю, что это раскрашивает числа, когда они появляются и в адресах?

Лучшее решение, вероятно, - добавить условное выражение в ваш скрипт awk ( непроверенный ):

if (i == 3 && $i == 2) {
  print "<TD><font color="green">2<\/font></TD>"
} else .....

В качестве альтернативы, ваше поле состояния - это единственное число в столбце, а адреса - нет, поэтому вы можете настроить соответствие шаблону:

"s/>2</><font color="green">2<\/font></g;......"

Т.е. соответствовать окружающим скобкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...