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

290
Vistas
¿En qué debería configurarse 'RS' en este comando awk?

Estoy usando awk para eliminar información útil de los archivos de registro. Así es como se ve mi archivo de registro:

 2016-02-19 20:18:46,861 115971,100126017,524,523,1,[144115198332971054] 2016-02-19 20:18:46,874 95496,100126019,5,5,0,[] 2016-02-19 20:18:46,883 115974,100126025,57,57,0,[] 2016-02-19 20:18:46,891 115975,100126026,4,4,0,[] 2016-02-19 20:18:46,918 115976,100126027,122,122,0,[] 2016-02-19 20:18:47,688 115978,100126029,11656,11641,15,[144115198334490817,144115197319238988,144115197291063350,144115198332904743,144115197318718547,144115197319714394,144115197306930902,144115197250548791,144115198320676757,14411519 7253880518,144115197289305237,144115198083289344,144115197319697491,144115198273784435,144115198081583082] 2016-02-19 20:18:47,731 99590,100126032,12,12,0,[] 2016-02-19 20:18:47,832 115982,100126034,1397,1396,1,[144115198273784435] 2016-02-19 20:18:47,849 106705,100126035,31,31,0,[] 2016-02-19 20:18:47,860 107469,100126036,16,16,0,[] 2016-02-19 20:18:47,927 115983,100126037,824,824,0,[] 2016-02-19 20:18:47,985 115985,100126039,564,564,0,[] 2016-02-19 20:18:48,048 115986,100126040,338,338,0,[] 2016-02-19 20:18:48,108 115987,100126041,259,259,0,[] 2016-02-19 20:18:48,187 115989,100126043,693,692,1,[144115198273784435]

Uso "," para la variable FS ; Necesito el contenido completo entre los corchetes [] , así que traté de configurar RS como "]" :

 awk 'BEGIN { FS=","; RS="]";} { print $2 ,$3, $6 ,$7}' removed-apply.log.2016-02-19

pero el resultado es incorrecto:

 861 115971 100126017 1 [144115198332971054] 874 95496 100126019 0 [] 883 115974 100126025 0 [] 891 115975 100126026 0 [] 918 115976 100126027 0 [] 688 115978 100126029 15 [144115198334490817 731 99590 100126032 0 [] 832 115982 100126034 1 [144115198273784435] 849 106705 100126035 0 [] 860 107469 100126036 0 [] 927 115983 100126037 0 [] 985 115985 100126039 0 [] 048 115986 100126040 0 [] 108 115987 100126041 0 [] 187 115989 100126043 1 [144115198273784435]

Parece que el RS sigue siendo el salto de línea.

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

0

Actualización : pensándolo bien, puede salirse con la suya con una sola expresión regular de separador de campo de entrada (especificada a través de la opción -F , que se traduce en la variable FS ):

 awk -F ',\\[?|\\]' '{ print $2 ,$3, $6 ,$7 }' removed-apply.log.2016-02-19

Tenga en cuenta la necesidad de duplicar \ instancias para producir el carácter que las sigue como un literal en el contexto de una expresión regular . Por ejemplo, \\[ se convierte en \[ literal por el análisis de cadena inicial de awk , que el análisis de expresiones regulares ve como \[ , lo que resulta en la interpretación como literal [ . En resumen: string ,\\[?|\\] da como resultado regex ,\[?|\] .


Respuesta original (como se acepta):

Su entrada todavía está claramente orientada a la línea , por lo que no hay razón para cambiar RS , el separador de registro de entrada.

En su lugar, analice cada línea en dos pasos:

  • Use FS para dividir inicialmente la entrada en 2 campos: antes de [ y entre [...] .
    • Nota: La expresión regular de aspecto extraño que se usa a continuación, [][] , es un conjunto de caracteres ( [...] ) que contiene 2 caracteres literales, ] y [ ; es conceptualmente equivalente a \[|\] .
  • Luego, use split() para dividir cada campo , en subcampos almacenados en matrices :
 awk ' BEGIN { FS="[][]" } # split into $1 (before "[") and $2 (between "[...]") { split($1, fa1, ",") # split $1 into subfields by "," and store in array fa1 split($2, fa2, ",") # split $2 into subfields by "," and store in array fa2 # Output fields of interest print fa1[2], fa1[3], fa2[1], fa2[2] }' removed-apply.log.2016-02-19

over 4 years ago · Santiago Trujillo Denunciar

0

Usar "]" como RS parece ser un paso en la dirección equivocada. (¿Cómo distinguiría la diferencia entre un archivo de entrada que consta de "[abc]" y uno que consta de "[abc"?)

Suponiendo que el texto que desea está entre corchetes en la misma línea, lo siguiente podría manejar el tipo de entrada que describe:

 grep '\[.*\]' | sed -e 's/^[^[]*\[\(.*\)\].*/\1/'

Es posible que deba modificar esto según los detalles de sus requisitos. También sería fácil traducir esto a awk.

Si sus requisitos son más complejos de lo que puede manejar lo anterior, por favor elaborelos.

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