Chercher deux lignes vides consécutives [bash] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 24-11-2009 à 11:03:59
Ca parait logique puisque dans ta condition tu lui dit de remettre à 0 lg_vide si et seulement si lg_vide est égale à 2
Marsh Posté le 24-11-2009 à 12:13:04
kisscoolz a écrit : Ca parait logique puisque dans ta condition tu lui dit de remettre à 0 lg_vide si et seulement si lg_vide est égale à 2 |
Oui, je suis d'accord. Et je l'avais bien vu, mais il faudrait que je compare le numéro des lignes entres elles pour savoir ou je suis.
Marsh Posté le 24-11-2009 à 15:30:12
Citation : |
Marsh Posté le 24-11-2009 à 15:35:54
Merci pour ta réponse. Ca peut me donner des idées.
Cependant, c'est pour être intégré dans un script bash, donc je prefererais utiliser du bash. A moins, que je puisse insérer du Perl dans un script Bash (mais j'en sais rien)
Marsh Posté le 24-11-2009 à 15:48:22
bha tu reprends "l'algo" et tu l'écris en awk
Marsh Posté le 24-11-2009 à 16:05:53
Petite question , que signifie "while(<> )"
Marsh Posté le 24-11-2009 à 16:06:46
le fou a écrit : Petite question , que signifie "while(<> )" |
pour chaque ligne sucée de STDIN
Marsh Posté le 25-11-2009 à 08:48:48
merci, pour ton aide.
j'ai adapté ta version en utilisant awk et je crois que j'ai réussi.
:
|
Marsh Posté le 25-11-2009 à 15:04:38
à la relecture le next n'est pas nécessaire, il est effectué implicitement, puis qu'on a pas d'autre intruction que le if/elsif/elsif
Marsh Posté le 25-11-2009 à 15:20:56
Tu as raison. merci de la précision (et de ton aide aussi).
Marsh Posté le 02-12-2009 à 14:15:16
Petite question subsidiaire :
Dés que je rencontre plus d'une ligne vide consécutive, je met un flag (variable ETAT="1" ) et une fois ma commande awk terminé, je teste ce flag pour afficher mon message d'erreur. Or, je n'ai jamais ce message, meme si awk a trouvé quelque chose. Mon bout de code :
|
Marsh Posté le 02-12-2009 à 16:18:17
normal, c'est une variable awk, pas shell.
tu peux afficher le message dans awk, dans un bloc END { }
Marsh Posté le 02-12-2009 à 16:58:18
Merci beaucoup. C'est exactement ce que je voulais. Décidement awk me surprend.
Marsh Posté le 18-12-2009 à 09:52:46
On peut essayer aussi :
Code :
|
C'est plus concis.
Et si tu veux parser tout le fichier, tu enlèves le "exit".
Marsh Posté le 18-12-2009 à 13:12:46
Ttienne a écrit : On peut essayer aussi :
C'est plus concis. |
Je comprends le principe que tu appliques. Mais qu'est ce que /^$/?
Marsh Posté le 18-12-2009 à 14:07:16
une expression régulière qui signifie que le caractère de fin de ligne (représenté par $) est collé au caractère de début de ligne (représenté par ^), donc une regex qui représente une ligne vide
Marsh Posté le 18-12-2009 à 14:10:30
wedgeant a écrit : une expression régulière qui signifie que le caractère de fin de ligne (représenté par $) est collé au caractère de début de ligne (représenté par ^), donc une regex qui représente une ligne vide |
Ok, pour l'explication (et merci) mais quel est l'interet de le representé ici?
Marsh Posté le 18-12-2009 à 14:25:55
tu devrais jeter un oeil sur la page de man de awk, ça serait bien utile je pense
Marsh Posté le 19-12-2009 à 10:04:03
le fou a écrit : |
Allez pour t'aider à mettre ton nez dans la doc, dans le principe, awk exécute des actions en fonction de la correspondance de la ligne avec un motif donné par une regex (en angliche : pattern matching)
Donc la syntaxe générale, c'est :
awk '{ |
BEGIN et END étant 2 "motifs" particuliers.
Chaque ligne du fichier d'entrée peut être traitée plusieurs fois, si plusieurs motifs correspondent, et dans l'ordre de la déclaration des motifs. Pour le détail des actions et la syntaxe des patterns (motifs), man awk et man regex
Marsh Posté le 24-11-2009 à 10:18:29
Bonjour,
Je cherche faire un script qui me permettrait de controler qu'il n'y a pas deux lignes vides à la suite l'une de l'autre.
J'ai essayé avec ceci
awk '{if(length($0)==0){
lg_vide++
if (lg_vide == 2) {
lg_vide=0
print "+> Il y a deux lignes vides avant la ligne "NR
}
}}' $FICHIER
Seulement, la remise à zero de la variable lg_vide ne marche pas. Je veux dire, qu'elle n'est pas remise a zero si une seule ligne vide est detecté.
Je suis ouvert à toute idée.
merci
Message édité par le fou le 24-11-2009 à 10:32:09
---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)