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

233
Visualizações
awk obtener los datos en función de la condición if else

Necesito nuevamente su experiencia, estoy tratando de hacer algo condicional usando awk para obtener las columnas.

Si miro los $5 , los datos pueden tener un year y, en algunos lugares, una date .

Entonces, cuando el year está allí, es bueno imprimir, pero otros valores en los que tengo date and time como 05:17:27 , entonces necesito imprimir el último campo.

 2021 2021 05:17:27 20:33:17 05:17:20 2020 2020 2021 2020 2021

A continuación se muestran mis datos de muestra.

archivo de datos.

 yogutdb01 Mon 28 Jun 2021 11:19:56 PM MST yogutdb02 Thu 30 Sep 2021 02:02:53 AM MST yogutdb03 Thu Jul 13 05:17:27 2017 yogutdb04 Fri Jun 23 20:33:17 2017 yogutdb05 Thu Jul 13 05:17:20 2017 yogutdb06 Wed 24 Jun 2020 03:49:16 PM MST yogutdb07 Wed 24 Jun 2020 04:05:10 PM MST yogutdb08 Sat 22 May 2021 04:19:14 AM MST yogutdb09 Thu 09 Apr 2020 12:16:32 PM CEST yogutdb10 Tue 11 May 2021 03:03:02 PM MST

Mi prueba: estoy usando a continuación pero obtengo un error de sintaxis en la condición else .

 $ awk '{ ($5=="[^0-9]+$")print $1,$2,$3,$4,$5; else print $1,$2,$3,$4,$NF}' my_data.text

Lo deseado debe ser:

 yogutdb01 2021 yogutdb02 2021 yogutdb03 2017 yogutdb04 2017 yogutdb05 2017 yogutdb06 2020 yogutdb07 2020 yogutdb08 2021 yogutdb09 2020 yogutdb10 2021

O

 yogutdb01 Mon 28 Jun 2021 yogutdb02 Thu 30 Sep 2021 yogutdb03 Thu Jul 13 2017 yogutdb04 Fri Jun 23 2017 yogutdb05 Thu Jul 13 2017 yogutdb06 Wed 24 Jun 2020 yogutdb07 Wed 24 Jun 2020 yogutdb08 Sat 22 May 2021 yogutdb09 Thu 09 Apr 2020 yogutdb10 Tue 11 May 2021
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

  • No puede usar el operador == para probar la coincidencia de expresiones regulares. En su lugar, puede usar la función match() o el operador ~ .
  • Debe colocar la expresión regular ^ delante de [0-9] , no dentro.

Entonces, por favor, intente:

 awk '{if (match($5,/^[0-9]+$/)) print $1, $2, $3, $4, $5; else print $1, $2, $3, $4, $NF}' my_data.text

Producción:

 yogutdb01 Mon 28 Jun 2021 yogutdb02 Thu 30 Sep 2021 yogutdb03 Thu Jul 13 2017 yogutdb04 Fri Jun 23 2017 yogutdb05 Thu Jul 13 2017 yogutdb06 Wed 24 Jun 2020 yogutdb07 Wed 24 Jun 2020 yogutdb08 Sat 22 May 2021 yogutdb09 Thu 09 Apr 2020 yogutdb10 Tue 11 May 2021

Aquí hay una alternativa usando el operador ~ :

 awk '$5 ~ /^[0-9]+$/ {print $1, $2, $3, $4, $5; next} {print $1, $2, $3, $4, $NF}' my_data.text
over 4 years ago · Santiago Trujillo Relatório

0

Según el resultado deseado, debe probar a continuación, que funcionará.

Puede usar coincidencias de expresiones regulares como ~ .

 $ awk '{ if ($5 !~ /:/) { print $1,$2,$3,$4,$5; next } { print $1,$2,$3,$4, $NF } }' exampl_data1

Resultado:

 yogutdb01 Mon 28 Jun 2021 yogutdb02 Thu 30 Sep 2021 yogutdb03 Thu Jul 13 2017 yogutdb04 Fri Jun 23 2017 yogutdb05 Thu Jul 13 2017 yogutdb06 Wed 24 Jun 2020 yogutdb07 Wed 24 Jun 2020 yogutdb08 Sat 22 May 2021 yogutdb09 Thu 09 Apr 2020 yogutdb10 Tue 11 May 2021

Solo para mencionar, como @tshiono también preguntó en el comentario, para obtener el resultado en orden, puede usar a continuación.

 $ awk '{ if ($5 !~ /:/) { print $1, $2, $3, $4, $5; next } { print $1, $2, $4, $3, $NF } }' exampl_data1
over 4 years ago · Santiago Trujillo Relatório

0

Puede imprimir los primeros 4 campos y verificar el quinto campo para solo 4 dígitos. Si no hay solo 4 dígitos, imprima el último campo.

 awk '{print $1, $2, $3, $4, ($5 ~ /^[0-9]+$/ ? $5 : $NF)}' my_data.text

Producción

 yogutdb01 Mon 28 Jun 2021 yogutdb02 Thu 30 Sep 2021 yogutdb03 Thu Jul 13 2017 yogutdb04 Fri Jun 23 2017 yogutdb05 Thu Jul 13 2017 yogutdb06 Wed 24 Jun 2020 yogutdb07 Wed 24 Jun 2020 yogutdb08 Sat 22 May 2021 yogutdb09 Thu 09 Apr 2020 yogutdb10 Tue 11 May 2021
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