Estoy intentando awk
modificar algunos archivos de texto usando este código.
awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt
pero no funcionó hasta que reemplacé la condición como esta FNR>5
.
Intenté mucho aquí pero no encontré la solución. puse "FNR>o"
& FNR>$o
pero nada.
¡Chicos, alguien puede ayudarme aquí! aporte :
date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15 20
30 40
50 12
55 77
producción
r.txt 5 15 20
r.txt 5 30 40
r.txt 5 50 12
r.txt 5 55 77
Respuesta1
El problema:
FNR>o
- Usar el
>
operador con un valor no inicializado- Si bien
o
no está inicializado, tiene un valor numérico de0
y un valor de cadena de la cadena vacía - En su secuencia de comandos,
o
está configurado con/^title/ { o=FNR+2 }
, pero/^title/
no aparece hasta el tercer registro. Entonces, los dos primeros registroso
no están inicializados yFNR>o
se evalúan comotrue
(porqueFNR==1
&FNR==2
songreater than zero
)
- Si bien
Solución posible:
o && FNR>o
- Especifique que
o
debe ser distinto de cero, además deFNR>o
Además, o
es algo confuso como nombre de variable de una sola letra; considere usar una letra como n
o una palabra más descriptiva como output
en su lugar.
print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)
podría simplificarse a:
printf("%-10s %-10d %-10s\n",FILENAME,o,$0)
o incluso:
printf "%-10s %-10d %-10s\n",FILENAME,o,$0