GNU/Linux >> Tutoriales Linux >  >> Linux

grep pares de patrones y archivo

Con GNU awk (gawk ) podrías usar un BEGINFILE regla para leer un nuevo patrón cada vez que cambia el archivo de entrada:

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

Realmente deberías comprobar que getline devuelve un nuevo patrón, por ejemplo

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

Tenga en cuenta que awk los patrones son extendidos expresiones regulares, similares a las admitidas por grep con el -E opción.

Podría lograr lo mismo en no GNU awk pasando search.patterns como primer archivo y usando NR y FNR adecuadamente para leer los patrones en una matriz indexada o buscar el siguiente patrón en la matriz.


Usando 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

Probándolo:

$ bash script.sh
home 3
dog 1
cat 4

El script guarda los nombres de archivo relevantes en el files matriz, y luego procede a leer patrones del search.patterns expediente. Para cada patrón, el primer archivo en el files se consulta la lista. Luego, el archivo procesado se elimina del files list (lo que produce un nuevo primer nombre de archivo en la lista).

Si el número de patrones excede el número de archivos en files , habrá errores de grep .


Podrías usar paste para hacer coincidir el patrón con el archivo:

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

Supongo que los nombres de los archivos no contienen tabulaciones.


Linux
  1. ¿Cómo ejecutar Grep con patrones múltiples y?

  2. ¿Imprimir líneas entre (e incluyendo) dos patrones?

  3. ¿Leyendo patrones Grep de un archivo?

  4. Comando grep de Linux

  5. ¿Cómo buscar contenido después del patrón?

Cómo hacer Grep para múltiples cadenas y patrones

Manipulación de texto con sed y grep

50 comandos grep productivos y prácticos para entusiastas de Linux

¿Lista los nombres de archivo según un patrón de nombre de archivo y el contenido del archivo?

Uso de las opciones de inclusión y exclusión de Rsync para incluir el directorio y el archivo por patrón

Cómo grep \n en el archivo