Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

81
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda