GNU/Linux >> Tutoriels Linux >  >> Linux

grep paires de motifs et fichier

Avec GNU awk (gawk ) vous pouvez utiliser un BEGINFILE règle pour lire un nouveau modèle à chaque fois que le fichier d'entrée change :

$ gawk 'BEGINFILE{getline pat < "search.patterns"} $0 ~ pat' file\ {1..3}.txt
home 3
dog 1
cat 4

Vous devriez vraiment vérifier que getline renvoie un nouveau motif, par exemple

gawk '
  BEGINFILE {
    if((getline pat < "search.patterns") <= 0) {
      print "Error reading pattern" > "/dev/stderr"
      exit 1
    }
  } 
  $0 ~ pat
' file\ {1..3}.txt

Notez que awk les motifs sont étendus expressions régulières, similaires à celles prises en charge par grep avec le -E option.

Vous pourriez obtenir la même chose en non-GNU awk en passant search.patterns comme premier fichier et en utilisant NR et FNR de manière appropriée soit pour lire les motifs dans un tableau indexé, soit pour rechercher le motif suivant dans le tableau.


Utilisation de bash :

#!/bin/bash

files=( 'file 1.txt' 'file 2.txt' 'file 3.txt' )

while IFS= read -r pattern; do
    grep -e "$pattern" "${files[0]}"
    files=( "${files[@]:1}" )
done <search.patterns

Le tester :

$ bash script.sh
home 3
dog 1
cat 4

Le script enregistre les noms de fichiers pertinents dans le files tableau, puis procède à la lecture des motifs à partir du search.patterns dossier. Pour chaque motif, le premier fichier dans le files liste est interrogée. Le fichier traité est alors supprimé du files list (produisant un nouveau premier nom de fichier dans la liste).

Si le nombre de modèles dépasse le nombre de fichiers dans files , il y aura des erreurs de grep .


Vous pouvez utiliser paste pour faire correspondre le modèle avec le fichier :

paste <(printf "%s\n" *.txt) search.patterns | while IFS=$'\t' read -r file pattern; do
    grep -- "$pattern" "$file"
done

Je suppose que les noms de fichiers ne contiennent pas d'onglets.


Linux
  1. Comment exécuter Grep avec plusieurs et modèles ?

  2. Sortie vers Stdout et en même temps Grep dans un fichier ?

  3. Trouver un modèle et déplacer ?

  4. Autorisations de fichiers et sauvegarde ?

  5. Couper / Grep Et Df -h ?

Comment Grep pour plusieurs chaînes et modèles

Manipuler du texte avec sed et grep

Imprimer des lignes entre (et y compris) deux motifs ?

Lire des modèles Grep à partir d'un fichier ?

50 commandes grep productives et pratiques pour les passionnés de Linux

Rediriger strace vers le fichier