Boucle, sed, awk pour traiter les données

Fermé
marc - Modifié par marc le 19/01/2012 à 16:59
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 - 20 janv. 2012 à 08:28
Bonjour,

Me lançant dans la création de scripts CGI j'ai quelques problèmes à comprendre :

#!/bin/bash 
OUTPUT="$(/bin/commande)" 
echo "Content-type: text/html" 
echo "" 
echo "<pre>$OUTPUT</pre>" 


Me retourne un joli résultat formaté que j'appelle dans une iframe :

1   param1  param2 param3 param4 
2   param5  param6 param7 param8 param9 


Seulement je souhaiterais pouvoir traiter les données ligne par ligne pour les insérer dans un tableau html.

Alors j'ai essayé dans un premier temps de mette chaque ligne dans une case du tableau àl'aide d'un tuto trouvé sur CCM :

#!/bin/bash 
OUTPUT="$(/bin/commande | while read line; do echo "<td>$line</td>"; done)" 
echo "Content-type: text/html" 
echo "" 
echo "<table>" 
echo "<tr>" 
echo "$OUTPUT" 
echo "</tr>" 
echo "</table>" 


Mais niet, soit rien ne s'affiche, soit il n'y a pas de mise en page. Où est-ce que je me trompe-je ? et/ou comment feriez-vous ?

Merci

2 réponses

mamiemando Messages postés 33352 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 novembre 2024 7 804
Modifié par mamiemando le 19/01/2012 à 20:04
Il faudrait que tu nous expliques le résultat que tu attends avec ce fichier :

1   param1  param2 param3 param4  
2   param5  param6 param7 param8 param9 


... ainsi que quelques autres informations :
- quel(s) caractère(s) est (sont) utilisé(s) pour séparer les différentes cases (tabulation ?)
- vu que toutes les lignes n'ont pas le même nombre de colonnes, connait-on à l'avance le nombre de colonnes du tableau ?
- pour les lignes qui ont un défaut de colonne, comment effectues-tu les fusions de cellule ?

En admettant que chaque ligne ait le même nombre de colonnes, dans l'idée, il faut changer chaque début de ligne (^)par <tr><td>, chaque fin de ligne ($) par </td></tr>, chaque séparateur (le caractère espace ?) par </td><td>. Ensuite il faut insérer le <table> et le </table> en début et fin de fichiers.

Tu peux commencer à lire ceci qui explique certaines bases avec sed :
https://forums.commentcamarche.net/forum/affich-24221292-trouver-les-majuscules-avec-sed#p24228793

Mais ça donnera par exemple :

echo "<table>"; ls -l1 / | sed -e 's% %</td><td>%' | sed -e 's%^%<tr><td>%' | sed -e 's%$%</td></tr>%'; echo "</table>"


Voilà sinon à mon avis, les iframes ce n'est pas un super choix.

Bonne chance
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 janv. 2012 à 08:28
hello
si je remplace /bin/commande par cat a1, j'obtiens ça:

$ cat a1
1   param1  param2 param3 param4 
2   param5  param6 param7 param8 param9 
$ 
$ cat  f1
#!/bin/bash

##OUTPUT="$(/bin/commande | while read line; do echo "<td>$line</td>"; done)" 
OUTPUT="$(cat a1 | while read line; do echo "<td>$line</td>"; done)" 
echo "Content-type: text/html" 
echo "" 
echo "<table>" 
echo "<tr>" 
echo "$OUTPUT" 
echo "</tr>" 
echo "</table>" 
$ 
$ ./f1
Content-type: text/html

<table>
<tr>
<td>1   param1  param2 param3 param4</td>
<td>2   param5  param6 param7 param8 param9</td>
</tr>
</table>
$ 
$ 
0