grep
mismo es capaz de hacerlo. Simplemente use la bandera -f
:
grep -f <patterns> <file>
<patterns>
es un archivo que contiene un patrón en cada línea; y <file>
es el archivo en el que desea buscar cosas.
Tenga en cuenta que, para forzar grep
para considerar cada línea como un patrón, incluso si el contenido de cada línea parece una expresión regular, debe usar la bandera -F, --fixed-strings
.
grep -F -f <patterns> <file>
Si tu archivo es un CSV, como dijiste, puedes hacer:
grep -f <(tr ',' '\n' < data.csv) <file>
Como ejemplo, considere el archivo "a.txt", con las siguientes líneas:
alpha
0891234
beta
Ahora, el archivo "b.txt", con las líneas:
Alpha
0808080
0891234
bEtA
La salida del siguiente comando es:
grep -f "a.txt" "b.txt"
0891234
No necesitas nada para for
-bucle aquí; grep
ofrece esta característica.
Ahora usando sus nombres de archivo:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
Puede cambiar ','
al separador que tienes en tu archivo.
Otra solución:
- usa
awk
y crea tu propiohash
(por ejemplo, ahash), todo controlado por ti mismo. - reemplazar
$0 to $i
y puede hacer coincidir cualquier campo que desee.
awk -F"," '
{
if (nowfile==""){ nowfile = FILENAME; }
if(FILENAME == nowfile)
{
hash[$0]=$0;
}
else
{
if($0 ~ hash[$0])
{
print $0
}
}
} ' xx yy