espaço na coluna time causando problema na formatação do arquivo html no script

1

Estou no processo de criação de um e-mail automatizado, no qual os dados do e-mail devem ser exibidos em um formato de tabela. Eu fiz alguma extensão gerar um formato de tabela no corpo do email, mas eu estou ficando abaixo do formato

---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26|02:00:00|2016-07-26|06:00:31|
---------------------------------------------

Mas deve ser:

---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26 02:00:00|2016-07-26 06:00:31|
---------------------------------------------

aqui eu removi | depois de 2016-07-26 porque 2016-07-26 02:00:00 é start_time e 2016-07-26 06:00:31 é endtime .

Estou consultando os dados do mysql DB para que eu não possa alterar o formato starttime / endtime, redirecionando minha saída para o arquivo excel e convertendo-o para o formato html. Você poderia me ajudar a obter a saída de formato esperada?

Meu código é o seguinte:

awk 'BEGIN{
FS=","
}
 {
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
 }
END{
print "</TABLE></BODY></HTML>"
 }
' status.csv > status.html
(

echo "From:abc "

echo "Subject: testing of html table using"
echo "Content-type: text/html"
echo
awk  'BEGIN{print "<table border="1">"} {print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print  "</tr>"} END{print "</table>"}'  status.html

) | sendmail [email protected] text

status.csv

st,2016-07-28 02:00:00,2016-07-28 08:10:18,06:10:18
evergreen,2016-07-28 08:10:32,2016-07-28 09:13:00,01:02:28
Discount,2016-07-28 09:00:00,2016-07-28 19:11:07,10:11:07
GO,2016-07-28 09:00:00,2016-07-28 15:33:04,06:33:04
BF,2016-07-28 09:30:38,2016-07-28 23:43:32,14:12:54
    
por megha 03.08.2016 / 00:13

1 resposta

1

Estou supondo que o arquivo CSV que você realmente possui tenha uma linha de cabeçalho adicional. Se não, você pode adicionar facilmente uma linha echo adicional para adicionar o cabeçalho.

Eu notei que há uma coluna extra de dados no seu CSV; parece uma duração.

Se você quiser manter a duração, isso é muito fácil:

(
  echo "From: abc"
  echo "Subject: testing of html table using"
  echo "Content-type: text/html"
  echo
  echo '<table border="1">'
  sed -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv
  echo '<table>'
) | sendmail ...

Cada linha do CSV é convertida em algo semelhante a:

<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td><td>14:12:54</td></tr>

Se você não quiser a última coluna de saída, podemos alterar a linha sed para removê-la:

sed  -e 's!,[^,]*$!!' -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv

Agora essa mesma linha

<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td></tr>

Em ambos os casos, porque não há , entre a hora e a data em que os mantemos no mesmo elemento <td> ... </td> data.

EDITAR PARA ADICIONAR:

Vamos dividir o sed em suas partes componentes:

Em primeiro lugar

s!,[^,]*$!!

Isso remove tudo, desde a última vírgula até o final da linha. Essencialmente, remove o campo "Duração"

Próximo

s!^!<tr><td>!

Isso garante que cada linha comece com <tr><td> - basicamente o início de uma nova linha da tabela e um novo elemento de dados

Então

s!$!</td></tr>!

O que garante que o elemento de dados termine e a linha da tabela termine no final de cada linha.

Neste ponto, temos uma linha que parece <tr><td>csv,file,data</td><tr> , então podemos converter todos os , em </td><tr>

s!,!</td><td>!g

Pequenos passos simples se somam para dar muito trabalho!

    
por 03.08.2016 / 00:59