Salut
Il te faut bien comprendre que si tu n'as rien qui te permettrait de différencier une ligne contenant le début de ton log d'une ligne contenant le milieu ou la fin de ton log, on ne pourra rien faire.
Cette base étant posée et admise, on va essayer de voir si on peut trouver une différence. A première vue avec ton exemple, je pencherais pour dire qu'une ligne contenant des pipes sera soit un log complet, soit un début de log. Et une ligne sans pipe sera la suite de la ligne précédente.
A partir de là, on peut poser l'algo suivant: on lit une ligne et on construit, avec la ligne lue, le log à afficher. Celui-ci ne sera affiché qu'une fois complet, c'est à dire quand on est sur une ligne indiquant un nouveau log.
Code :
#!/bin/sh while read ligne do # Vérifions s il y a un pipe if echo "$ligne" |grep "|" 1>/dev/null then # Pipe donc on se trouve sur un nouveau log à traiter # Mais d abord on gère et on affiche le log précédent (s il existe) test -n "$log" && echo "$log" # Puisqu on est sur un nouveau log, on l initialise log="$ligne" else # Pas de pipe donc on se trouve en milieu de log - On le rajoute alors au log en cours log="$log $ligne" fi done < fichier_log # Ici on a traité la dernière ligne (dernier log) mais il n a pas été affiché vu que la boucle n affichait que le log précédent echo "$log"
|
Bon, j'ai tapé ça en live sans tester mais ça me semble pas mal...
Message édité par Sve@r le 13-07-2011 à 19:43:20
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.