logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 18-10-2012 04:22:37

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

wiki - awk une commande à ajouter dans les filtres !

C'est là :
La commande awk par l'exemple

awk est l'utilitaire qu'il faut utiliser sans hésiter pour parser (parseur : nm (linguistique informatique) analyseur syntaxique qui étiquette les mots d'un texte) très efficacement et en quelques secondes des fichiers de logs complexes par exemple.

Nota :
Voilà, je n'en mettrai pas plus.

big_smile

Dernière modification par smolski (18-10-2012 12:43:48)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#2 27-10-2013 14:07:52

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - awk une commande à ajouter dans les filtres !

Mise en conformité des balises... wink

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#3 27-10-2013 14:42:36

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

Ça serait cool que qqn teste les exemples, bon nombre ne fonctionnent pas à vue d'œil smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#4 28-10-2013 10:17:11

MicP
Invité

Re : wiki - awk une commande à ajouter dans les filtres !

C'est parti pour un test :


michel@deb9550:~/Documents/testAwk$ cat >file.txt
Nom             Genre           Age
---------------------------------------
CAMILLE         M               7
CHLOE           F               12
CLARA           F               11
CLEMENT         M               7
EMMA            F               6
THEO            M               8
michel@deb9550:~/Documents/testAwk$ awk '{ print $1, $2 }' file.txt
Nom Genre
---------------------------------------
CAMILLE M
CHLOE F
CLARA F
CLEMENT M
EMMA F
THEO M
michel@deb9550:~/Documents/testAwk$ awk '/CAMILLE/ { print $1, $3, $2 }' file.txt
CAMILLE 7 M
michel@deb9550:~/Documents/testAwk$ awk '/^C.*[AO]/ { print $1, $3, $2 }' file.txt
CAMILLE 7 M
CHLOE 12 F
CLARA 11 F
michel@deb9550:~/Documents/testAwk$ awk '/^CL/,/^E/ { print $0 }' file.txt
CLARA           F               11
CLEMENT         M               7
EMMA            F               6
michel@deb9550:~/Documents/testAwk$ awk '{ print NR, NF, $0 }' file.txt
1 3 Nom             Genre           Age
2 1 ---------------------------------------
3 3 CAMILLE         M               7
4 3 CHLOE           F               12
5 3 CLARA           F               11
6 3 CLEMENT         M               7
7 3 EMMA            F               6
8 3 THEO            M               8
michel@deb9550:~/Documents/testAwk$ awk '/CAMILLE/ { OFS="," ; print $2,$1 }' file.txt
M,CAMILLE
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    /^CL/,/^E/ {
         print NR, \$0
    }
michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
awk: prog.awk:2:          print NR, \$0
awk: prog.awk:2:                    ^ la barre oblique inverse n'est pas le dernier caractère de la ligne
awk: prog.awk:2:          print NR, \$0
awk: prog.awk:2:                    ^ syntax error
michel@deb9550:~/Documents/testAwk$


Zut ! Chez moi, ça bloque ici : C'est juste la barre oblique en question qui est en trop.
Ce qui donnerait, sans la barre :


michel@deb9550:~/Documents/testAwk$ cat > prog.awk
/^CL/,/^E/ {
     print NR, $0    
}
michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
5 CLARA           F               11
6 CLEMENT         M               7
7 EMMA            F               6
michel@deb9550:~/Documents/testAwk$
 


Tout le reste est OK :


michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    /^CL/,/^E/
    BEGIN {
            action
    }
     
    /filter/,/filter/ { action }
     
    { action}
     
    END {
            action
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
CLARA           F               11
CLEMENT         M               7
EMMA            F               6
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    BEGIN {
            FS=" "
            OFS=";"
    }
    {
            print $1, $3
    }
    END {
            printf "\nThe file has %d lines\n", NR
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
Nom;Age
---------------------------------------;
CAMILLE;7
CHLOE;12
CLARA;11
CLEMENT;7
EMMA;6
THEO;8

The file has 8 lines
michel@deb9550:~/Documents/testAwk$ awk '/THEO/ { print $1, tolower($1) }' file.txt
THEO theo
michel@deb9550:~/Documents/testAwk$ awk '/CHLOE/ { print $3, int($3/5)}' file.txt
12 2
michel@deb9550:~/Documents/testAwk$ awk 'NR > 2 { printf "%10s %02d %-10s\n", $1,$3, $1}' file.txt
   CAMILLE 07 CAMILLE  
     CHLOE 12 CHLOE    
     CLARA 11 CLARA    
   CLEMENT 07 CLEMENT  
      EMMA 06 EMMA      
      THEO 08 THEO      
michel@deb9550:~/Documents/testAwk$ awk '/CLEM/ { print $1, length($1) }' file.txt
CLEMENT 7
michel@deb9550:~/Documents/testAwk$ awk 'NR >2 { print $1, match($1,"A")}' file.txt
CAMILLE 2
CHLOE 0
CLARA 3
CLEMENT 0
EMMA 4
THEO 0
michel@deb9550:~/Documents/testAwk$ awk 'NR >2 { gsub("A","_",$1) ; print $1 }' file.txt
C_MILLE
CHLOE
CL_R_
CLEMENT
EMM_
THEO
michel@deb9550:~/Documents/testAwk$ awk '{ print $1, substr($1,2,3) }' file.txt
Nom om
--------------------------------------- ---
CAMILLE AMI
CHLOE HLO
CLARA LAR
CLEMENT LEM
EMMA MMA
THEO HEO
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    function gentag(nom,age) {
            tmp=tolower(substr(nom,1,3))
            return tmp "_" age
    }
     
    BEGIN {
            FS=" "
            OFS=";"
    }
     
    {
            print $1, $3, gentag($1,$3)
    }
     
    END {
    print NR , "lines"
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
Nom;Age;nom_Age
---------------------------------------;;---_
CAMILLE;7;cam_7
CHLOE;12;chl_12
CLARA;11;cla_11
CLEMENT;7;cle_7
EMMA;6;emm_6
THEO;8;the_8
8;lines
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    BEGIN {
            OFS=","
    }
    NR <=2 { next }
    {
            if ( $3 < 11 ) {
                    ecole="primaire"
            } else {
                    ecole="college"
            }
     
            print $1, ecole
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
CAMILLE,primaire
CHLOE,college
CLARA,college
CLEMENT,primaire
EMMA,primaire
THEO,primaire
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    NR <=2 { next }
    {
            min=1
            printf "%-10s", $1
            while  ( min <= $3 ) {
                    printf "."
                    min++
            }
            printf "\n"
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
CAMILLE   .......
CHLOE     ............
CLARA     ...........
CLEMENT   .......
EMMA      ......
THEO      ........
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    NR <=2 { next }
    {
            printf "%-10s", $1
            for ( min=1 ; min <= $3; min++ ) {
                    printf "."
            }
            printf "\n"
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
CAMILLE   .......
CHLOE     ............
CLARA     ...........
CLEMENT   .......
EMMA      ......
THEO      ........
michel@deb9550:~/Documents/testAwk$ cat > prog.awk
    {
            if ( NR <= 2 ) { next } # skip first 2 lines
            tab_age[$2]+=$3
            tab_cpt[$2]++
    }
    END {
            for ( genre in tab_age ) {
            print genre, " : ", "Moy :", int(tab_age[genre]/tab_cpt[genre]), "ans", "nb :", tab_cpt[genre]
            }
    }

michel@deb9550:~/Documents/testAwk$ awk -f prog.awk file.txt
F  :  Moy : 9 ans nb : 3
M  :  Moy : 7 ans nb : 3
michel@deb9550:~/Documents/testAwk$
 

Dernière modification par MicP (28-10-2013 10:32:39)

#5 28-10-2013 10:29:45

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

Salut,
Il restait un \ qui n'avait pas été retiré. Ça doit le faire maintenant smile
Smolski a déjà pas mal retravaillé le document depuis mon message, c'est pourquoi quasi tout marche smile

Merci pour ton test.

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#6 28-10-2013 10:34:13

MicP
Invité

Re : wiki - awk une commande à ajouter dans les filtres !

J'avais essayé de le supprimer (le caractère en trop.. pas smolski), mais j'ai vu que tu étais déjà dessus smile
Impec !

Dernière modification par MicP (28-10-2013 10:35:15)

#7 28-10-2013 12:40:29

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - awk une commande à ajouter dans les filtres !

MicP a écrit :

J'avais essayé de le supprimer (le caractère en trop.. pas smolski)


Ouf, nom de d'zeus... c'est sévère ici ! tongue


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#8 28-10-2013 12:51:09

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

Fô pas l'supprimer avant qu'il ait parlé  yikes
Tu vas l'dire, oui, où sont les chocos !  big_smile

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#9 28-10-2013 14:17:27

MicP
Invité

Re : wiki - awk une commande à ajouter dans les filtres !

smolski a écrit :

... Ouf, nom de d'zeus... c'est sévère ici  ...


Mais non ! , j'ai pas dit que smolski avait mauvais caractère..; rhâââhhh! smile (faut tout préciser ici...)

Je parlais du caractère "\" en trop dans le script "awk" du wiki de la commande "awk" que j'ai testé et qui n'a pas marché,
alors, j'ais dit que........... etc...

#10 28-10-2013 16:49:35

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - awk une commande à ajouter dans les filtres !

@paskal
Plutôt mourir de boulimie que de donner un seul de ces choco là ! tongue

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#11 28-10-2013 18:31:45

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

tongue tongue tongue

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#12 01-06-2015 18:37:47

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - awk une commande à ajouter dans les filtres !

Tatouillage au niveau de l'en-tête
Est-ce que ce qui suit la commande awk est à placer en retour de commande ?

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

#13 01-06-2015 18:45:26

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

J'en ai bien l'impression.  smile

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#14 01-06-2015 18:47:45

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - awk une commande à ajouter dans les filtres !

Demain hein ? Fini pour ce soir tongue

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

#15 01-06-2015 18:50:17

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

big_smile

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#16 01-06-2015 18:51:08

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - awk une commande à ajouter dans les filtres !

wink

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

#17 02-06-2015 17:45:03

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - awk une commande à ajouter dans les filtres !

Voilà, c'est fait tongue

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

#18 02-06-2015 17:46:30

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : wiki - awk une commande à ajouter dans les filtres !

C'est bôôôôô !  cool

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#19 02-06-2015 17:47:57

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - awk une commande à ajouter dans les filtres !

cool

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

Pied de page des forums