Ajuda com uma função AWK

0

Eu tenho problemas com o comando AWK. Quando eu usei este código é:

$ awk '{a[NR]=$1} 
 END {for (i=0;i<NR;i++)  
      {B=a[i+1];A=a[i];C=(B-A);D=int(C/16)} 
      {for (j=0;j<=D;j++) 
         {if(C!=16) {print t=A;A=A+16;B} else {print A}}
 }}' 19.txt

Meu arquivo de entrada "19.txt" é:

1510
1526
1542
1558
1614
1630
1646
1702
1802

Eu descobri isso:

1702
1718
1734
1750
1766
1782
1798

Meu código só usa a diferença das últimas linhas, por quê ?? Eu quero completar os espaços entre as linhas consecutivas, onde a diferença entre linhas é igual a 16, semelhante a este:

1510
1526
1542
1558
----
1574
1590
1606
----
1614
1630
1646
----
1662
1678
1694
----
1702
----
1718
1734
1750
1766
1782
1798
----
1802
    
por ELizabeth VIlcañaupa Raymundo 30.07.2015 / 18:09

1 resposta

2

Isso produz a saída que você está procurando e não precisa armazenar todo o arquivo na memória.

awk -v diff=16 ' 
    NR>1 && $1-prev > diff { 
        print "----" 
        while ($1-prev > diff) { 
            prev += diff 
            print prev 
        } 
        print "----" 
    }  
    { 
        print 
        prev = $1 
    } 
' 19.txt  

Pergunte-me se há algo que você não entende.

    
por 30.07.2015 / 18:30

Tags