comando de impressão awk com condição de NR > var

comando de impressão awk com condição de NR > var

Estou tentando awkmodificar 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>$omas 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 onão seja inicializado, ele possui um valor numérico 0e um valor de string da string vazia
    • No seu script, oestá definido com /^title/ { o=FNR+2 }, mas /^title/não aparece até o terceiro registro. Portanto, para os dois primeiros registros onão é inicializado e FNR>oé avaliado como true(porque FNR==1& FNR==2are greater than zero)

Solução possível:

o && FNR>o
  • Especifique que odeve 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 nou 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

informação relacionada