Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
816 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  utilisation de la commande awk dans un script shell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

utilisation de la commande awk dans un script shell

n°1719794
mic_12
Posté le 18-04-2008 à 11:53:44  profilanswer
 

Bonjour,
Je veux récupérer un mot dans un fichier. la commande awk me renvoie toute la ligne qui contient le mot en question.
 
ex contenu fichier:
micurui testkfj jfjk
oytutu kbkllk
 
ce que je veux c récupérer uniquement le mot testkfj mais je précise que je connais uniquement le début du mot. la commande awk '/test/' test.txt | cut -d" " -f2 marche mais là c'est parce que je connais la colonne où trouver la donnée (ce qui n'est pas le cas normalement). On m'a parlé des expressions régulières mais je vois pas comment les utiliser.  :sweat:

 

merci pour votre aide


Message édité par mic_12 le 18-04-2008 à 11:53:58
mood
Publicité
Posté le 18-04-2008 à 11:53:44  profilanswer
 

n°1720043
aigles
Posté le 18-04-2008 à 17:45:25  profilanswer
 

Ta commande awk, telle qu'elle est codée, fait exactement la même chose qu'un grep c'est à dire qu'elle te renvoie toutes les lignes contenant la chaîne de caractéres test.
 
Si tu veux obtenir tous les mots commençant par test dans ton fichier, tu peux faire :

Code :
  1. awk '
  2. {
  3.    for (i=1; i<=NF; i++)
  4.       if ($i ~ /^test/)
  5.          print $i;
  6. }
  7. ' fichier

Si c'est le premier mot trouvé qui t'intéresse :

Code :
  1. awk '
  2. {
  3.    for (i=1; i<=NF; i++)
  4.       if ($i ~ /^test/) {
  5.          print $i;
  6.          exit;
  7.       }
  8. }
  9. ' fichier


 
Jean-Pierre.


Message édité par aigles le 19-04-2008 à 22:33:57
n°1720326
mic_12
Posté le 19-04-2008 à 18:56:56  profilanswer
 

salut aigles. Merci pour ta réponse.  :)
Encore une petite question. Le NF dans ton if, c'est le nombre de lignes?

n°1720387
aigles
Posté le 19-04-2008 à 22:32:52  profilanswer
 

mic_12 a écrit :

salut aigles. Merci pour ta réponse.  :)
Encore une petite question. Le NF dans ton if, c'est le nombre de lignes?

Non, il s'agit du nombre de champs.
 
Jean-Pierre.

n°1720749
chaica
Posté le 21-04-2008 à 08:56:53  profilanswer
 

Grep est ton ami:
 

grep -o 'test[[:alnum:]]*' fichier.txt

n°1720768
aigles
Posté le 21-04-2008 à 09:49:10  profilanswer
 

chaica a écrit :

Grep est ton ami:
 

grep -o 'test[[:alnum:]]*' fichier.txt


Cette option est bien intéressante mais elle n’est malheureusement pas disponible avec toutes les versions de grep.
De plus, elle ne résout pas complètement le problème elle ne travaille pas au niveau des champs.
L'option -w permet de travailler au niveau des mots, mais la définition du mot est différente de celle du champ; tout dépend donc de ce que l’on souhaite obtenir.
 
 
$ cat test.dat
Ceci est un petit test
Nous detestons ce parfum
Un denier petit test, pour la route ...
$ grep -o 'test[[:alnum:]]*' test.dat
test
testons
test
$ grep -wo 'test[[:alnum:]]*' test.dat
test
test
$ awk '
> {
>    for (i=1; i<=NF; i++)
>      if ($i ~ /^test/)
>         print $i;> }
> ' test.dat
test
test,
$
 
Jean-Pierre.

n°1720793
chaica
Posté le 21-04-2008 à 10:32:35  profilanswer
 

aigles a écrit :

Cette option est bien intéressante mais elle n’est malheureusement pas disponible avec toutes les versions de grep.
De plus, elle ne résout pas complètement le problème elle ne travaille pas au niveau des champs.
L'option -w permet de travailler au niveau des mots, mais la définition du mot est différente de celle du champ; tout dépend donc de ce que l’on souhaite obtenir.
 
 
$ cat test.dat
Ceci est un petit test
Nous detestons ce parfum
Un denier petit test, pour la route ...
$ grep -o 'test[[:alnum:]]*' test.dat
test
testons
test
$ grep -wo 'test[[:alnum:]]*' test.dat
test
test
$ awk '
> {
>    for (i=1; i<=NF; i++)
>      if ($i ~ /^test/)
>         print $i;> }
> ' test.dat
test
test,
$
 
Jean-Pierre.


 
Si tu changes l'énoncé de départ, à savoir le fichier

micurui testkfj jfjk
oytutu kbkllk


 
Je change mon grep également:

grep -o '\btest[[:alnum:]||[:punct:]]*' fichier.txt

n°1721021
mic_12
Posté le 21-04-2008 à 14:55:20  profilanswer
 

nan mais t'enflammes pas chaica, j'ai pas l'option -o de toute facon. :whistle:  
Je l'avais testé (et découvert) sous linux mais là c'est pas sous linux  :)

n°1721023
mic_12
Posté le 21-04-2008 à 14:57:35  profilanswer
 

merci pour le awk, aigles, il marche à merveille.  :)
juste encore une ou deux questions.  :whistle:
le tilde (~) ca signifie quoi au juste? Ou est ce que je peux trouver de la doc pour connaitre toutes ces "subtilités" du shell?

Message cité 1 fois
Message édité par mic_12 le 21-04-2008 à 14:57:45
n°1721302
Sve@r
Posté le 21-04-2008 à 20:28:34  profilanswer
 

mic_12 a écrit :

merci pour le awk, aigles, il marche à merveille.  :)  
juste encore une ou deux questions.  :whistle:  
le tilde (~) ca signifie quoi au juste? Ou est ce que je peux trouver de la doc pour connaitre toutes ces "subtilités" du shell?


 
Le tilde en shell (en bash pour être précis) correspond à ton HOME et "~user" correspond au HOME de user. Mais dans l'exemple de aigles, le tilde est une instruction awk et non du shell (en fait c'est le programme awk qui analyse l'ensemble de tout ce qui est entre '{...}' ) donc faut aller voir la doc awk => man awk


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  utilisation de la commande awk dans un script shell

 

Sujets relatifs
@IP dans variable shell xp (cmd)script d'automatisation de MàJ d'un antivirus
valeur absolue en shell?[shell] lire un fichier mais pas la première ni dernière ligne
Commande Shell et phpHelloworld en script perl cgi
Utilisation de borland c++ builder 6.0Mise en forme d'un fichier xls compliquée
IDE Dev-C++ et utilisation de bibliothéque 
Plus de sujets relatifs à : utilisation de la commande awk dans un script shell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR