utilisation de la commande awk dans un script shell - Shell/Batch - Programmation
Marsh Posté le 18-04-2008 à 17:45:25
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 :
|
Si c'est le premier mot trouvé qui t'intéresse :
Code :
|
Jean-Pierre.
Marsh Posté le 19-04-2008 à 18:56:56
salut aigles. Merci pour ta réponse.
Encore une petite question. Le NF dans ton if, c'est le nombre de lignes?
Marsh Posté le 19-04-2008 à 22:32:52
mic_12 a écrit : salut aigles. Merci pour ta réponse. |
Non, il s'agit du nombre de champs.
Jean-Pierre.
Marsh Posté le 21-04-2008 à 08:56:53
ReplyMarsh Posté le 21-04-2008 à 09:49:10
chaica a écrit : Grep est ton ami:
|
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.
Marsh Posté le 21-04-2008 à 10:32:35
aigles a écrit : Cette option est bien intéressante mais elle n’est malheureusement pas disponible avec toutes les versions de grep. |
Si tu changes l'énoncé de départ, à savoir le fichier
micurui testkfj jfjk |
Je change mon grep également:
grep -o '\btest[[:alnum:]||[:punct:]]*' fichier.txt |
Marsh Posté le 21-04-2008 à 14:55:20
nan mais t'enflammes pas chaica, j'ai pas l'option -o de toute facon.
Je l'avais testé (et découvert) sous linux mais là c'est pas sous linux
Marsh Posté le 21-04-2008 à 14:57:35
merci pour le awk, aigles, il marche à merveille.
juste encore une ou deux questions.
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?
Marsh Posté le 21-04-2008 à 20:28:34
mic_12 a écrit : merci pour le awk, aigles, il marche à merveille. |
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
Marsh Posté le 18-04-2008 à 11:53:44
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.
merci pour votre aide
Message édité par mic_12 le 18-04-2008 à 11:53:58