GNU/Linux >> LINUX-Kenntnisse >  >> Linux

grep Paare von Mustern und Datei

Mit GNU awk (gawk ) könnten Sie einen BEGINFILE verwenden Regel, bei jeder Änderung der Eingabedatei ein neues Muster zu lesen:

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

Das sollten Sie unbedingt überprüfen getline gibt ein neues Muster zurück, zum Beispiel

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

Beachten Sie, dass awk Muster werden erweitert reguläre Ausdrücke, ähnlich denen, die von grep unterstützt werden mit dem -E Option.

Sie könnten dasselbe in Nicht-GNU awk erreichen indem Sie search.patterns übergeben als erste Datei und mit NR und FNR entsprechend, um entweder die Muster in ein indiziertes Array einzulesen oder das nächste Muster im Array nachzuschlagen.


Mit 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

Testen:

$ bash script.sh
home 3
dog 1
cat 4

Das Skript speichert die entsprechenden Dateinamen im files -Array und fährt dann fort, Muster aus search.patterns zu lesen Datei. Für jedes Muster die erste Datei im files Liste abgefragt. Die verarbeitete Datei wird dann aus dem files gelöscht list (ergibt einen neuen ersten Dateinamen in der Liste).

Wenn die Anzahl der Muster die Anzahl der Dateien in files überschreitet , treten Fehler ab grep auf .


Sie könnten paste verwenden um das Muster mit der Datei abzugleichen:

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

Ich gehe davon aus, dass die Dateinamen keine Tabulatoren enthalten.


Linux
  1. Wie führe ich Grep mit mehreren und Mustern aus?

  2. Zeilen zwischen (und einschließlich) zwei Mustern drucken?

  3. Lesen von Grep-Mustern aus einer Datei?

  4. Wie suche ich nach Inhalten nach dem Muster?

  5. Strace in Datei umleiten

Wie man nach mehreren Zeichenfolgen und Mustern grep

Bearbeiten von Text mit sed und grep

50 Produktiver und praktischer grep-Befehl für Linux-Enthusiasten

Verwenden von Rsync-Optionen zum Einschließen und Ausschließen, um Verzeichnisse und Dateien nach Muster einzuschließen

Wie grep \n in Datei

Vorteile der Cat'ing-Datei und der Weiterleitung an grep