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 NR
es 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 print
acció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.)