web-dev-qa-db-fra.com

Faire correspondre la colonne spécifique avec la commande grep

Je ne parviens pas à faire correspondre une colonne spécifique avec la commande grep. J'ai un fichier de test (test.txt) comme celui-ci ..

Bra001325       835     T       13      c$c$c$c$c$cccccCcc      !!!!!68886676
Bra001325       836     C       8       ,,,,,.,,        68886676
Bra001325       841     A       6       ,$,.,,. BJJJJE
Bra001325       866     C       2       ,.      HJ

Et je veux extraire toutes les lignes qui ont un numéro 866 dans la deuxième colonne. Quand j'utilise la commande grep je reçois toutes les lignes qui contiennent le nombre ce nombre

grep "866" test.txt

Bra001325       835     T       13      c$c$c$c$c$cccccCcc      !!!!!68886676
Bra001325       836     C       8       ,,,,,.,,        68886676
Bra001325       866     C       2       ,.      HJ

Comment puis-je faire correspondre une colonne spécifique avec la commande grep? 

5
upendra

Essayez de faire ceci:

$ awk '$2 == 866' test.txt

Inutile d'ajouter {print}, le comportement par défaut de awk consiste à imprimer sur une condition true.

avec grep :

$ grep -P '^\S+\s+866\b' *

Mais awk peut aussi imprimer les noms de fichiers et est bien plus robuste que grep ici:

$ awk '$2 == 866{print FILENAME":"$0; nextfile}' *
13
Gilles Quenot

Dans mon cas, le séparateur de champ n'est pas un espace mais une virgule. Donc, je devrais ajouter ceci, sinon cela ne fonctionnera pas pour moi (On Ubuntu 18.04.1).

awk -F ', ' '$2 == 866' test.txt
1
Harry