En un archivo de texto, tengo 150 palabras. Tengo otro archivo de texto, que tiene unas 100.000 líneas.
¿Cómo puedo verificar si cada una de las palabras que pertenecen al primer archivo está en el segundo o no?
Pensé en usar grep , pero no pude encontrar cómo usarlo para leer cada una de las palabras en el texto original.
¿Hay alguna manera de hacer esto usando awk ? ¿O otra solución?
Probé con este script de shell, pero coincide con casi todas las líneas:
#!/usr/bin/env sh cat words.txt | while read line; do if grep -F "$FILENAME" text.txt then echo "Se encontró $line" fi doneOtra forma que encontré es:
fgrep -w -o -f "words.txt" "text.txt"Puedes usar grep -f :
grep -Ff "first-file" "second-file"O bien para que coincida con las palabras completas:
grep -w -Ff "first-file" "second-file"ACTUALIZACIÓN: Según los comentarios:
awk 'FNR==NR{a[$1]; next} ($1 in a){delete a[$1]; print $1}' file1 file2Usa grep así:
grep -f firstfile secondfileSEGUNDA OPCIÓN
Gracias a Ed Morton por señalar que las palabras en el archivo "reservado" se tratan como patrones. Si eso es un problema, puede o no serlo, el OP tal vez pueda usar algo como esto que no usa patrones:
Archivo "reservado"
cat dog foxy archivo "texto"
The cat jumped over the lazy fox but didn't land on the moon at all. However it did land on the dog!!!El script Awk es así:
awk 'BEGIN{i=0}FNR==NR{res[i++]=$1;next}{for(j=0;j<i;j++)if(index($0,res[j]))print $0}' reserved textcon salida:
The cat jumped over the lazy fox but didn't land on the However it did land on the dog!!!TERCERA OPCIÓN
Alternativamente, se puede hacer de manera bastante simple, pero más lentamente en bash:
while read r; do grep $r secondfile; done < firstfile