Pos de la ligne la plus longue
Bonjour,
voici un programme awk
#!/usr/bin/awk
BEGIN{n=4
}
END{
NR==3
s= $0
NR==2
x= $0
printf("%d\n",length(s))
printf("%d\n",length(x))
}
ce programme doit m'aficher le nombre de caractere et la position de la ligne la plus longue d'un fichier contenant 3 ligne(ce fichier s'apelle fich1 et se situe sur le bureau)
OR en tapant la ligne d'execution du prog dans le terminale(/usr/bin/awk -f exos2.awk /home/mina/Bureau/fich1) , le terminal m'afiche 5 5
sachant que mon fichier fich1 sela ligne
qu'est ce qui me manque pour que le programme fait mon objectif
sil vous plais c'est urgent
merci
voici un programme awk
#!/usr/bin/awk
BEGIN{n=4
}
END{
NR==3
s= $0
NR==2
x= $0
printf("%d\n",length(s))
printf("%d\n",length(x))
}
ce programme doit m'aficher le nombre de caractere et la position de la ligne la plus longue d'un fichier contenant 3 ligne(ce fichier s'apelle fich1 et se situe sur le bureau)
OR en tapant la ligne d'execution du prog dans le terminale(/usr/bin/awk -f exos2.awk /home/mina/Bureau/fich1) , le terminal m'afiche 5 5
sachant que mon fichier fich1 sela ligne
qu'est ce qui me manque pour que le programme fait mon objectif
sil vous plais c'est urgent
merci
A voir également:
- Pos de la ligne la plus longue
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Site de vente en ligne particulier - Guide
1 réponse
Personnellement j'utiliserais plutôt la built-in awk length() appliquée à $0, un bloc BEGIN pour initialiser les variables (ligne et longueur).
Je pense aussi que tu dois revoir la syntaxe awk et la manière dont architecturer ton code.
1) BEGIN : initialiser les variables : ici longueur et ligne, qui mémorisent la ligne qui t'intéresse et sa longueur.
2) Les blocs de traitement. Ici c'est pour toutes les lignes donc il y a juste un bloc sans expression régulière.
3) END : afficher le résultat.
Ainsi à ce stade on voit déjà que le code démarre comme ceci :
Maintenant reste à réfléchir sur le traitement en lui-même. Concrètement à chaque ligne que tu lis tu es susceptible de corriger la ligne et la longueur. La longueur tu l'as vu, consiste à utiliser length(). La chaîne qui nous intéresse est la ligne complète, donc c'est length($0).
Ensuite, il faut également corriger la ligne courante. On sait que celle-ci est mémorisée dans la variable NR, qui est corrigée automatiquement par awk à chaque fois qu'il lit une nouvelle ligne.
Maintenant, on ne veut faire cette mémorisation que si la ligne que l'on lit (length($0)) est plus longue que celle mémorisée jusqu'ici (longueur). On fait un tour dans l'aide de awk :
... et on s'aperçoit que le bloc if(...) { ... } va permettre de s'en sortir.
Je te laisse conclure pour voir si tu arrives à finaliser ton exercice afin que l'exercice t'apporte quelque chose... ça me paraît plus intéressant que de te donner la solution !
Bonne chance
Je pense aussi que tu dois revoir la syntaxe awk et la manière dont architecturer ton code.
1) BEGIN : initialiser les variables : ici longueur et ligne, qui mémorisent la ligne qui t'intéresse et sa longueur.
2) Les blocs de traitement. Ici c'est pour toutes les lignes donc il y a juste un bloc sans expression régulière.
3) END : afficher le résultat.
Ainsi à ce stade on voit déjà que le code démarre comme ceci :
BEGIN { // On met des valeurs négatives pour que ce soit corriger // dès la lecture de la première ligne longueur = -1; ligne = -1; } { // Traitement } END { print longueur, ligne; }
Maintenant reste à réfléchir sur le traitement en lui-même. Concrètement à chaque ligne que tu lis tu es susceptible de corriger la ligne et la longueur. La longueur tu l'as vu, consiste à utiliser length(). La chaîne qui nous intéresse est la ligne complète, donc c'est length($0).
Ensuite, il faut également corriger la ligne courante. On sait que celle-ci est mémorisée dans la variable NR, qui est corrigée automatiquement par awk à chaque fois qu'il lit une nouvelle ligne.
Maintenant, on ne veut faire cette mémorisation que si la ligne que l'on lit (length($0)) est plus longue que celle mémorisée jusqu'ici (longueur). On fait un tour dans l'aide de awk :
man awk
... et on s'aperçoit que le bloc if(...) { ... } va permettre de s'en sortir.
Je te laisse conclure pour voir si tu arrives à finaliser ton exercice afin que l'exercice t'apporte quelque chose... ça me paraît plus intéressant que de te donner la solution !
Bonne chance