Estou tentando awk
modificar alguns arquivos txt usando este código
awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt
mas não funcionou até que eu substituísse a condição como this FNR>5
.
Então tentei muito aqui mas não descobri a solução. Eu coloquei "FNR>o"
& FNR>$o
mas nada.
Então pessoal, alguém pode me ajudar aqui! entrada :
date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15 20
30 40
50 12
55 77
saída
r.txt 5 15 20
r.txt 5 30 40
r.txt 5 50 12
r.txt 5 55 77
Responder1
O problema:
FNR>o
- Usando o
>
operador com um valor não inicializado- Embora
o
não seja inicializado, ele possui um valor numérico0
e um valor de string da string vazia - No seu script,
o
está definido com/^title/ { o=FNR+2 }
, mas/^title/
não aparece até o terceiro registro. Portanto, para os dois primeiros registroso
não é inicializado eFNR>o
é avaliado comotrue
(porqueFNR==1
&FNR==2
aregreater than zero
)
- Embora
Solução possível:
o && FNR>o
- Especifique que
o
deve ser diferente de zero, além deFNR>o
Além disso, o
é um pouco confuso como um nome de variável com uma única letra – considere usar uma letra como n
ou uma palavra mais descritiva comooutput
print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)
poderia ser simplificado para:
printf("%-10s %-10d %-10s\n",FILENAME,o,$0)
ou mesmo:
printf "%-10s %-10d %-10s\n",FILENAME,o,$0