Cómo aplicar el comando awk en todos los campos excepto en algunas filas específicas

Cómo aplicar el comando awk en todos los campos excepto en algunas filas específicas

Tengo un archivo donde cada línea 156780 hay una fila de encabezado.

Quería aplicar el comando awk a la primera columna de cada fila, excepto a la segunda columna de las filas del encabezado.

O al menos las filas del encabezado no deberían verse afectadas.

¿Alguien puede ayudarme a hacer esto?

He usado el comando awk como se indica a continuación

awk 'NR>2 {printf("%10i %15.8E\n",$1,$2);}' fort.74 > fort.75

Respuesta1

Las filas del encabezado cumplirán la condición NR % 156780 == 0. Esto significa que puedes usar

awk 'NR % 156780 != 0 { process non-header row }' ...

... o posiblemente

awk '(NR - 1) % 156780 != 0 { process non-header row }' ...

(como NRes 1 para la primera fila, no cero)

Si desea pasar las líneas del encabezado sin verse afectadas:

awk '(NR - 1) % 156780 != 0 { process non-header row } (NR - 1) % 156780 == 0 { print }' ...

Es decir, simplemente agregue una printacción única para la condición inversa de la que usa para actuar en las líneas que no son de encabezado.

Respuesta2

¿Qué tal lo simple?

awk '(NR==1)          { header=$0; rem="we retrieve the header content";}
     ( $0 != header ) { process non header lines here ... }'

(Opcionalmente, puede agregar un "; siguiente" en la primera línea, pero si no, también le permitirá probar en un archivo pequeño, por ejemplo, uno con las 5 primeras líneas del archivo original: la segunda línea no debería procesar el línea si coincide con el encabezado.)

información relacionada