La création d'un tableau HTML avec BASH & AWK
Je vais avoir des problèmes de la création d'un tableau html à afficher les statistiques à partir d'un fichier texte. Je suis sûr qu'il y a 100 façons de faire mieux, mais ici, c'est:
(Les commentaires dans le script ci-dessous montrent les résultats)
#!/bin/bash
function getapistats () {
curl -s http://api.example.com/stats > api-stats.txt
awk {'print $1'} api-stats.txt > api-stats-int.txt
awk {'print $2'} api-stats.txt > api-stats-fqdm.txt
}
# api-stats.txt example
# 992 cdn.example.com
# 227 static.foo.com
# 225 imgcdn.bar.com
# end api-stats.txt example
function get_int () {
for i in `cat api-stats-int.txt`;
do echo -e "<tr><td>${i}</td>";
done
}
function get_fqdn () {
for f in `cat api-stats-fqdn.txt`;
do echo -e "<td>${f}</td></tr>";
done
}
function build_table () {
echo "<table>";
echo -e "`get_int`" "`get_fqdn`";
#echo -e "`get_fqdn`";
echo "</table>";
}
getapistats;
build_table > api-stats.html;
# Output fail :|
# <table>
# <tr><td>992</td>
# <tr><td>227</td>
# <tr><td>225</td><td>cdn.example.com</td></tr>
# <td>static.foo.com</td></tr>
# <td>imgcdn.bar.com</td></tr>
# Desired output:
# <tr><td>992</td><td>cdn.example.com</td></tr>
# ...
Les guillemets à aller à l'extérieur les accolades. Je sais que ça fonctionne comme ça, mais à la prochaine simple augmentation de la complexité de la panne. N'utilisez pas de
for i in $(cat)
- utilisation while read -r; do ...; done < filename
. Utilisation $()
au lieu de backticks.
OriginalL'auteur jdorfman | 2012-07-14
Vous devez vous connecter pour publier un commentaire.
C'est assez simple à faire dans le plus pur awk:
Awk est vraiment fait pour ce type d'utilisation.
Vous pouvez rediriger la sortie de ce directement à un navigateur à l'aide de bcat ou ce petit script sur OSX
Ne devrait pas le dernier
<tr>
être " <\tr>' à la place?Oui, vous avez un point... Réponse de mise à jour.
OriginalL'auteur
Vous pouvez le faire avec une awk au moins.
OriginalL'auteur geirha
cela peut être fait w/bash 😉
mais mon expérience est que généralement c'est une mauvaise chose de faire ce genre de choses dans bash/awk/etc
la fonction que j'ai utilisé dans le code est profondément enterré dans la page de manuel de bash...
je vous recommande d'utiliser certains réel de la langue pour ce genre de traitement de données, par exemple: (ruby ou python), car ils sont plus souples/lisible et maintenable
python
peut-être la solution. Merci bud 😉OriginalL'auteur Zoltán Haindrich