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

149
Vistas
Agregar cadena a la salida awk

Tengo un archivo de texto con el siguiente contenido.

 data void void void 1 2 3 end 6 7 8 9 data void void void 4 5 6 end 4 5 8 9

Quería extraer líneas entre las cadenas 'data' y 'end' y lo logré con el siguiente awk one-liner

 awk '/data/,/end/{i++} /end/{i=0} i>4' filename

la salida es

 1 2 3 4 5 6

Ahora quería la cantidad de veces que aparece el punto de datos antes de cada bloque. Algo como esto:

 3 1 2 3 3 4 5 6

¿Es posible lograr esto con awk?

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

0

Puede hacerlo con bastante facilidad si solo cuenta las líneas que están compuestas por dígitos entre la ocurrencia de data y el end y almacena los valores en una matriz indexada por el conteo. Luego, cuando se alcance el end , emita el conteo y luego los valores almacenados en la matriz antes de restablecer el conteo y la bandera que indica que está entre un data y el end , por ejemplo

 awk ' /data/ { between = 1 } between==1 && $1~/^[[:digit:]]+$/ { a[++n] = $1 } /end/ { printf "\n%d\n\n", n for (i = 1; i <= n; i++) print a[i] between = n = 0 } ' file

( nota: si puede tener dos o más registros data sin un end que siga a cada registro data , deberá agregar una prueba o manejar eso según sea necesario. Eso se lo dejamos a usted).

Ejemplo de uso/resultado

Con su entrada en file , obtendría:

 3 1 2 3 3 4 5 6

Déjame saber si tienes más preguntas.

over 4 years ago · Santiago Trujillo Denunciar

0

otro

 awk '/data/{if(d) print ""; f=1;c=0;d=RS} f && /^[0-9]$/ {d=d RS $0; c++} /end/{f=0; print cd}' file 3 1 2 3 3 4 5 6
over 4 years ago · Santiago Trujillo Denunciar

0

Con sus muestras mostradas, intente seguir el programa awk .

 awk ' /data/,/end/{ if($0~/^[0-9]/){ count++ } if($0~/^end/){ print (++count1>1? ORS count:count) ORS value value=count="" } value=($0~/^[0-9]/?(value?value ORS:"")$0:ORS) } ' Input_file

Explicación: simplemente tomando valores entre el rango de data para end según las muestras mostradas. Luego, cada vez que la línea comience desde los dígitos, aumente el valor de la variable de conteo en 1 y siga agregando líneas en la variable de valor, cada vez que la línea comience desde el final, imprima el valor del valor de la variable y anule el valor y el conteo para reiniciarse.

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