Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

88
Vistas
Cómo hacer una coincidencia estricta con awk

Estoy consultando un archivo con el otro archivo y los tengo de la siguiente manera:

Archivo1:

 Angela S Darvill| text text text text Helen Stanley| text text text text Carol Haigh S|text text text text .....

Archivo2:

 Carol Haigh Helen Stanley Angela Darvill

Este comando:

 awk 'NR==FNR{_[$1];next} ($1 in _)' File2.txt File1.txt

devuelve líneas que se superponen, PERO no tiene una coincidencia estricta. Teniendo una coincidencia estricta, solo Helen Stanley debería haber sido devuelta.

¿Cómo restringes awk en una superposición estricta?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Con sus muestras mostradas, intente seguir. Estaba en el camino correcto, debe hacer 2 cosas, la primera: tomar la línea completa como a índice en la matriz mientras lee file2.txt y establecer el campo seapeator en | antes de que awk comience a leer el archivo 1

 awk -F'|' 'NR==FNR{a[$0];next} $1 in a' File2.txt File1.txt

El comando anterior no funciona para mí (estoy en Mac, no sé si importa), pero

 awk 'NR==FNR{_[$0];next} ($1 in _)' File2.txt. FS="|" File1.txt

funcionado bien

over 4 years ago · Santiago Trujillo Denunciar

0

También puede usar grep para hacer coincidir desde File2.txt como una lista de expresiones regulares para hacer una coincidencia exacta.

Puedes usar sed para preparar los partidos. Aquí hay un ejemplo:

 sed -E 's/[ \t]*$//; s/^(.*)$/^\1|/' File2.txt ^Carol Haigh| ^Helen Stanley| ^Angela Darvill| ...

Luego use el proceso con ese sed como un argumento -f para grep :

 grep -f <(sed -E 's/[ \t]*$//; s/^(.*)$/^\1|/' File2.txt) File1.txt Helen Stanley| text text text text

Dado que su ejemplo File2.txt tiene espacios finales, el sed tiene s/[ \t]*$//; como primera sustitución. Si su archivo real no tiene esos espacios comerciales, puede hacer lo siguiente:

 grep -f <(sed -E 's/.*/^&|/' File2.txt) File1.txt

Ed Morton menciona un buen punto de que grep aún interpretará los metacaracteres RE en File2.txt . Puede usar el indicador -F para que solo se usen cadenas literales:

 grep -F -f <(sed -E 's/.*/&|/' File2.txt) File1.txt
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda