Je filtre un fichier de log avec la commande suivante :
awk '/TIMESTAMP/ || /IN/ || /OUT/ {print}' fichier.log > fichier.out
J'aimerai que le fichier commence au premier TIMESTAMP. Actuellement, j'efface les premières ligne IN et OUT à la main.
awk '/TIMESTAMP/ || /IN/ || /OUT/ {print}' fichier.log > fichier.out
# Peux-tu etre plus clair STP ?
Posté par totof2000 . Évalué à 2.
Tu veux uniquelent les lignes contenant TIMESTAMP ET (IN ou out) ?
awk ' /TIMESTAMP/ && (/IN/ || /OUT)'
De mémoire, pas besoin de print ....
[^] # Re: Peux-tu etre plus clair STP ?
Posté par totof2000 . Évalué à 2.
awk ' /TIMESTAMP/ && (/IN/ || /OUT/)'
[^] # Re: Peux-tu etre plus clair STP ?
Posté par dubis . Évalué à 1.
[^] # Re: Peux-tu etre plus clair STP ?
Posté par totof2000 . Évalué à 2.
1/ Timestamp, In et out sur la même ligne ?
2/ ligne contenant Timestamp, ET lignes contenant In et Out, en commencant par la première ligne Timestamp ?
Si c'est 2, voir plus bas.
# utiliser une variable
Posté par Octabrain . Évalué à 2.
/timestamp/ {print; var=1 }
var == 1 && (/in/ || /out/) {print}
[^] # Re: utiliser une variable
Posté par dubis . Évalué à 1.
[^] # Re: utiliser une variable
Posté par Octabrain . Évalué à 5.
sed -n '/TIMESTAMP/{
p
h
}
/IN\|OUT/{
x
/^$/ {
x
be
}
x
p
}
:e'
On se sert du "hold space" de sed. Si on voit ligne timestamp, on met quelque chose dedans (commande "h"). Tant qu'il n'y a pas eu de timestamp, le hold space est vide.
Quand on voit IN|OUT, on teste s'il contient quelque chose (les tests ne peuvent pas se faire sur le hold space, donc on échange ("x") avant. S'il est vide, on sort, sinon on affiche.
[^] # Re: utiliser une variable
Posté par gaaaaaAab . Évalué à 3.
On peut le raccourcir un tout petit peu en omettant le label, puisque d'après le man (et confirmé par mes tests), lorsqu'il est omis, ça branche en fin de script.
Sinon, avec sed, on peut aussi travailler par bloc de lignes (pas seulement en ligne à ligne), et ça permet de simplfier :
sed -n '/TIMESTAMP/,/OUT/{
/IN\|OUT\|TIMESTAMP/{
p
}
}' /path/to/file
à noter que dans ces deux versions, on affiche le début du dernier bloc TIMESTAMP/IN/OUT même s'il est incomplet.
[^] # Re: utiliser une variable
Posté par gaaaaaAab . Évalué à 3.
sed -n '/TIMESTAMP/,/OUT/{
/TIMESTAMP/ { h }
/IN/ { H }
/OUT/ {
H
x
p
}
}' ./path/to/file
a y est, je suis fan du hold space :)
[^] # Re: utiliser une variable
Posté par Octabrain . Évalué à 2.
[^] # Re: utiliser une variable
Posté par gaaaaaAab . Évalué à 2.
sur ce coup là, je n'aurais pas pu écrire ça sans ton commentaire.
Le hold space, c'est le genre de trucs ou on se demande après coup comment on a pu passer à côté si longtemps ...
Je compte plus le nombre de trucs que j'ai appris sur programmation.shell, je l'aime bien ce forum :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.