bonjour,
Je resouleve un probleme...
j'ai un fichier de type:
deck1 poum2 deck54 plough4
deck1 deck2 poum3 mouet4 etc.
Je voudrais pouvoir faire un "grep" sur un champs, genre,
grep fichier "* * deck54 *"
pour qu'il retourne le contenu de la ligne.
Hors, quand je fais ça, le "grep" agit sur tout les champs.
Quelle est la solution pour qu'il agisse sur un seul champs...?
(separé par des tabulations)
Il faut que se soit en bash, bien entendu...!
merci d'avance
# idée
Posté par riba . Évalué à 4.
ou grep -e "expression régulière qui sélectionne ton 3ème champ"
[^] # Re: idée
Posté par kowalsky . Évalué à 3.
ligne entiere, et pas juste le 3em champs...
donc si je fais "grep deck 54", le retour serait:
deck1 poum2 deck54 plough4
[^] # Re: idée
Posté par Obsidian . Évalué à 4.
grep -e "^[^\t]*\t[^\t]*\tdeck54\t" devrait fonctionner si la syntaxe est les caractères échapés ne le perturbent pas trop.
# awk
Posté par gaaaaaAab . Évalué à 4.
$ awk < file ' $3~/deck54/'
$3, c'est pour comparer sur le troisième champ (comme dans ton exemple)
et print $0 (affichage de la ligne) est l'action par défaut.
[^] # Re: awk
Posté par Rv1 . Évalué à 1.
Sinon tu as raison awk fait ça très bien, on peut ommetre le $0 :
awk '$3~/deck54/ {print}' < file
[^] # Re: awk
Posté par kowalsky . Évalué à 2.
Par contre il est case-sensitive...
J'aimerais bien qu'il ne fasse pas la difference entre les majuscules
et les minuscule... Je planche, si quelqu'un a la soluce...
[^] # Re: awk
Posté par gaaaaaAab . Évalué à 2.
Je te laisse faire joujou avec tolower et toupper. Plutôt toupper en fait, ça t'évitera des problèmes d'accent.
Sinon, tu peux aussi remplacer /deck54/ par /[dD][eE][cC][kK]54/ puisqu'il s'agit d'une regex, mais c'est plus long et nettement moins drole à utiliser :)
[^] # Re: awk
Posté par kowalsky . Évalué à 2.
je regarde et je te dis...!
[^] # Re: awk
Posté par kowalsky . Évalué à 2.
Mais comment on utilise se genre de variable...?
awk -v IGNORECASE=0 etc...?
Et tolower, ça s'utilise du genre:
awk '$4~/tolower 'guerin'/' /apache/base/*/*
Bouh je cherche, je cherche...
[^] # Re: awk
Posté par kowalsky . Évalué à 2.
Bon, ça c'est bon, mais maintenant je n'arrive pas
a modifier la sortie d'une commande...
du cat genre:
cat foo.text | awk 'BEGIN { print tolower() }'...
je cherche, je cherche ...! :)
[^] # Re: awk
Posté par gaaaaaAab . Évalué à 2.
awk 'tolower($4) ~/machin/'
Sinon, je connaissais pas IGNORECASE. Ca a l'air bien aussi. A priori, d'après la doc, il faut que tu le positionnes à autre chose que 0 pour ignore la casse.
Ca serait donc plutot
awk -v IGNORECASE=1 '(...)'
Contrairement à mes posts précédents, j'ai pas testé ce que je dis là. C'est direct tiré de la doc. A vérifier donc :)
[^] # Re: awk
Posté par kowalsky . Évalué à 2.
j'ai trouvé ça,
cat /apache/base/*/* | awk '{ print tolower ($0) }' | awk -F "\t" '$4~/'$var'/'
ça marche super.
Je te remercie encore...!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.