Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Se positionner directement sur une ligne en AWK
Envoyé par: morey

Bonjour,

auriez vous la solution pour me positionner directement dans un fichier texte en Awk ?


Merci d'avance pour votre aide très précieuse !!!


MoreY

Poste le Thursday 24 January 2008 15:21:58
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: tellmewhy

Bonjour morey, :-)

Qu'entends-tu par te positionner directement ?
Que veux-tu faire exactement ?

Poste le Friday 25 January 2008 15:18:39
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

Bonjour,

j'ai un fichier texte contenant un millier de lignes par exemples et, sachant que je n'ai à modifier que la ligne
936, est ce que je suis obligé de balayer tout le fichier ou bien peut on se positionner directement, en début de awk,
à la ligne 936 ?

Merci beaucoup pour votre aide !!!

Poste le Tuesday 29 January 2008 07:51:00
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: tellmewhy

Bonjour morey, :-)

Je ne sais pas si je réponds à ta question, mais si j'ai bien compris voici deux exemples :

Dans le premier je me place directement sur une ligne choisie :

:~$ echo -e "12 14\n16 18\n20 22"
12 14
16 18
20 22
:~$ echo -e "12 14\n16 18\n20 22" | awk 'NR==2 { print $0 }'
16 18

Dans le second je me place sur une ligne choisie et sur un champ déterminé :

:~$ echo -e "12 14\n16 18\n20 22" | awk 'NR==2 { print $2 }'
18

Attention à bien faire la différence dans l'utilisation de = et ==.
Tu trouveras toutes les réponses à tes questions dans le manuel de gawk.
Le manuel de gawk.
Le chapitre concernant l'utilisation de = et ==

Une mine d'or (le trésor de cep) http://www.cepcasa.info/divers/



Poste le Tuesday 29 January 2008 16:39:19
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

Merci beaucoup tellmewhy !!!

C'est exactement ce que je recherchais !!!

MERCIIIIIIIII

Poste le Wednesday 30 January 2008 07:43:04
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: tellmewhy

Bonjour morey, :-)

Bah, de rien. ;-)

Poste le Wednesday 30 January 2008 15:02:05
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

..... je n'arrive pas à faire marcher le NR !!!!!!!!!!

je commence à devenir fou.... le programme commence toujours à la ligne 1.
il faut le placer ou ce NR ??? et pourquoi ca ne marche pas

Arf=`awk -v Sortie=$W_Sortie '
BEGIN {
NR == 15
}
{
print $0 >> Sortie
}
END {}
' $W_Nom `


Merci beaucoup pour votre aide !!!

Poste le Thursday 31 January 2008 08:49:00
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: oudoubah

Ce qui se trouve dans la partie BEGIN { } est exécuté avant la lecture du flux.

Le NR==2 doit être utilisé tout simplement comme l'a écrit tellmewhy

Regarde un peu mieux son code ;-)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 31 January 2008 14:02:28
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

bonjour,


je n'arrive pas du tout à faire fonctionner le NR !!!

je pense avoir vraiment tout essayé :-(


HELP ME !!!

ou faut il le positionner ???


awk '

begin {
...
}

{
...
}

end {
...
}

'

Poste le Tuesday 12 February 2008 11:00:34
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: tellmewhy

Bonsoir morey, :-)

Bah..., t'es encore là toi ? ;-)

Tu n'a pas écouté oudoubah, mais c'est pas bien du tout ça, :-( :

Citation

Ce qui se trouve dans la partie BEGIN { } est exécuté avant la lecture du flux.

Une petite démonstration :

:~$ echo -e "1 2\n3 4\n5 6" > ~/exemple.txt

:~$ cat ~/exemple.txt
1 2
3 4
5 6

:~$ cat ~/exemple.txt | awk 'BEGIN { print $2}'

Mais il n'y a rien, ?-(

:~$ cat ~/exemple.txt | awk 'BEGIN { a="Bonsoir smiling smiley";print a}'
Bonsoir smiling smiley

On est avant le flux.
Alors on ajoute le flux.

:~$ cat ~/exemple.txt | awk 'BEGIN { a="Bonsoir smiling smiley";print a}{ print a,$2}'
Bonsoir smiling smiley
Bonsoir smiling smiley 2
Bonsoir smiling smiley 4
Bonsoir smiling smiley 6

On brode et on utilise END :

:~$ cat ~/exemple.txt | awk 'BEGIN { a="Bonsoir smiling smiley";print a}{ print a,$2}END{ print $2}'
Bonsoir smiling smiley
Bonsoir smiling smiley 2
Bonsoir smiling smiley 4
Bonsoir smiling smiley 6
6

Enfin pour en revenir à ton problème :

:~$ cat ~/exemple.txt | awk 'BEGIN { a="Bonsoir smiling smiley"}NR==2{ print a,$2}'
Bonsoir smiling smiley 4

J'ajoute deux liens en plus :

Introduction à (g)awk par Xavier GARREAU
Tutoriel awk par nyal

Dans le tout premier lien que je t'avais indiqué, il y avait ce chapitre, très utile :
The BEGIN and END Special Patterns





Poste le Thursday 14 February 2008 01:32:27
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

Merci beaucoup tellmewhy pour tes explications !!!

ne sachant pas comment utiliser le NR==, j'ai mis cette condition dans ma boucle awk :

awk -v W_Ligne=$W_Ligne
begin {}
{
if NR==W_Ligne {
...
}
}
end {}



Je viens donc de modifier mon script à l'aide de ton aide très précieuse :
awk -v W_Ligne=$W_Ligne
begin {}
NR==W_Ligne
{
...
}
end {}

Malheureusement, j'obtiens le message d'erreur suivant :
DSIMD_EclatU.ksh[159]: no space


Je pense avoir cerné le problème .... mon NR== ne fonctionne pas du tout !!!
HELP MEEEEEEE :-)
voici un petit script qui me pose problème :

Tableau=4
W_Ligne=`echo $Tableau | cut -f2 -d:`
Log="arf"
awk -v NB_Lignes=$W_Ligne -v Log=$Log '
BEGIN {}
NR==NB_Lignes
{
print NB_Lignes " : " NR >> Log
}
' $W_Nom

en allant voir le log ...
4 : 1
4 : 2
4 : 3
...

j'espere avoir été assez clair ...


Poste le Thursday 14 February 2008 09:26:19
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

oups :

Tableau=4
Log="arf"
awk -v NB_Lignes=$Tableau -v Log=$Log '
BEGIN {}
NR==NB_Lignes
{
print NB_Lignes " : " NR >> Log
}
' $W_Nom

Poste le Thursday 14 February 2008 09:50:31
Répondre     Citer    
Re: Se positionner directement sur une ligne en AWK
Envoyé par: morey

j'allège au fur et à mesure le script :

Tableau=4
awk -v NB_Lignes=$Tableau '
BEGIN {}
NR==NB_Lignes
{
print NB_Lignes " : " NR
}
' $W_Nom

hum ...

le fichier à traiter :
je suis sur la ligne 1
je suis sur la ligne 2
je suis sur la ligne 3
je suis sur la ligne 4
je suis sur la ligne 5
je suis sur la ligne 6

voila ce que ca me donne :
4 : 1
4 : 2
4 : 3
je suis sur la ligne 4
4 : 4
4 : 5
4 : 6

hum...........

j'ai trouvé mon problème !!!!!!!!!!!!!!!!!!!
il m'écrit dans le log : "je suis sur la ligne 4" alors que je ne lui ai rien demandé !!!

A priori, on s'en fout qu'il nous l'indique ... mais quand on utilise le awk de cette facon :
valeur = awk ....
valeur récupère 'je suis sur la ligne 4' et ca me pose un gros problème !!!!!!!!

y a t'il moyen de lui dire de se le garder pour lui 'je suis sur la ligne 4' ??????


j'espere ne pas trop vous prendre la tête avec mon problème ... :-)

Poste le Thursday 14 February 2008 09:58:41
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Se positionner directement sur une ligne en AWK
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons