string - varias - Extrae cadenas en un archivo de texto usando grep
ls grep (2)
for line in `cat text.txt`; do grep $line input.txt >> output.txt; done
Contenido de text.txt
:
ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
Editar :
Una solución más segura con while reading:
cat text.txt | while read line; do grep "$line" input.txt >> output.txt; done
Editar 2 :
Muestra text.txt
:
ABCB8
ABCB8XY
ABCC12
Muestra input.txt
:
You were hired to do a job; we expect you to do it.
You were hired because ABCB8 you kick ass;
we expect you to kick ass.
ABCB8XY You were hired because you can commit to a rational deadline and meet it;
ABCC12 we''ll expect you to do that too.
You''re not someone who needs a middle manager tracking your mouse clicks
Si no le importa el orden de las líneas, la solución rápida sería canalizar la solución a través de un sort | uniq
sort | uniq
:
cat text.txt | while read line; do grep "$line" input.txt >> output.txt; done; cat output.txt | sort | uniq > output2.txt
El resultado está en output.txt
.
Editar 3 :
cat text.txt | while read line; do grep "/<${line}/>" input.txt >> output.txt; done
¿Eso está bien?
Tengo file.txt con nombres uno por línea como se muestra a continuación:
ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
....
Quiero grep cada uno de estos desde un archivo input.txt.
Manualmente hago esto uno a la vez como
grep "ABCB8" input.txt > output.txt
Podría alguien ayudar a grep automáticamente todas las cadenas en file.txt desde input.txt y escribirlo en output.txt.
Puede utilizar el -f
como se describe en Bash, Linux. Necesitará eliminar líneas de un archivo basándose en el contenido coincidente de otro archivo
grep -o -f file.txt input.txt > output.txt
Bandera
-
-f FILE
,--file=FILE
:
Obtenga patrones de FILE, uno por línea. El archivo vacío contiene cero patrones, y por lo tanto no coincide con nada. (-f es especificado por POSIX)
-
-o
,--only-matching
:
Imprima solo las partes coincidentes (no vacías) de una línea coincidente, con cada una de esas partes en una línea de salida separada.