GNU/Linux >> Tutoriels Linux >  >> Linux

grep pour rechercher des données dans la première colonne

Utilisez awk. cat myfile | awk '{print $1}' | grep query


Si vous pouvez utiliser awk , essayez ceci :

text.txt
--------
Product   Cost
Abc....def  10
Abc.def     20
ajsk,,lll   04

With only awk:
awk '$1 ~ /^Abc.*def$/ { SUM += $2 } END { print SUM } ' test.txt
Result: 30

With grep and awk:
grep "^Abc.*def.*\d*$" test.txt | awk '{SUM += $2} END {print SUM}'
Result: 30

Explication :

  • awk lit chaque ligne et correspond à la première colonne avec une expression régulière (regex)
  • La première colonne doit commencer par Abc, suivi de n'importe quoi (zéro ou plusieurs fois) et se terminer par def
  • Si une telle correspondance est trouvée, ajoutez la 2e colonne à la variable SUM
  • Après avoir lu toutes les lignes, imprimez la variable

Grep extrait chaque ligne commençant par Abc, suivi de n'importe quoi, suivi de def, suivi de n'importe quoi, suivi d'un nombre (zéro ou plusieurs fois) pour terminer. Ces lignes sont alimentées/acheminées vers awk. Awk incrémente simplement SUM pour chaque ligne qu'il reçoit. Après avoir lu toutes les lignes reçues, il imprime la variable SUM.


Linux
  1. Correspondance de modèle multiligne à l'aide de Sed, Awk ou Grep ?

  2. Comment rechercher dans des fichiers spécifiques correspondant à un modèle ?

  3. Capturer des groupes avec Awk ou Grep ?

  4. Trouver uniquement la première occurrence en utilisant uniquement Grep ?

  5. Utiliser grep pour rechercher en sens inverse

Comment utiliser la commande grep sous Linux/UNIX

Comment exclure dans Grep

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Commande Linux awk avec 10 exemples

Comment couper les premières n et dernières n colonnes ?

utiliser awk avec des conditions de valeur de colonne