AWK - imprime o arquivo e comprimento em duas linhas no END

0

Eu tenho que fazer script no AWK, que irá escolher o campo mais longo na linha e depois disso no final mostrar em duas linhas arquivadas e sob (na segunda linha) comprimento.

Eu fiz isso:

NF>0 || $0=="^[[:space:]]{1,}$"{
        tab[FNR]=$1
        len[FNR]=length($1)
        i=2
        while (i<=NF)
        {
                len2=length($i)
                if(len2>len[FNR])
                {
                        tab[FNR]=$i
                        len[FNR]=len2
                }
                i=i+1
        }
        print tab[FNR]

}
END{
        for(x in tab)
        {
                printf("%s ",tab[x])
        }
        for (y in len)
        {
                printf("%d ", len[y])
        }
}

Mas resultados:  (..) Não-ASCII

Informative Meta-Syntax Transport Fields", Structured Identification 2919, Showalter, Language", "Internationalized Applications August Bernstein, <http://cr.yp.to/proto/verp.txt>. Addresses Levine Taughannock Box Trumansburg, US Phone: [email protected] http://jl.ly Randall Incorporated Morehouse Diego, US [email protected] Informational 
                                                                                 11 11 10 13 9 9 8 14 12 9 11 14 6 14 13 11 10 11 11 9 9 11 8 39 9 10 9 8 10 38 11 12 10 10 10 10 13 1 9 8 12 13 9 9 8 8 6 7 8 11 12 14 10 10 11 12 14 12 10 13 17 9 10 13 11 10 8 13 11 13 9 9 14 10 9 9 8 13 12 10 10 13 1 9 13 12 11 10 13 7 12 8 13 16 7 10 8 9 13 12 7 9 9 11 14 11 14 13 11 12 15 9 7 12 9 10 7 11 8 10 11 13 8 14 13 13 1 9 9 8 12 13 20 13 13 11 13 11 9 9 11 10 11 13 9 12 13 11 12 11 13 13 10 12 8 11 8 13 9 10 8 10 12 10 12 13 1 9 8 8 12 16 9 10 11 11 9 12 9 10 11 10 7 10 11 8 8 10 8 9 9 6 9 8 9 11 8 9 10 8 9 9 8 8 9 10 12 10 9 11 13 1 9 7 13 11 8 9 11 10 8 8 25 10 38 17 45 15 43 10 25 11 28 13 49 10 13 10 10 7 7 9 8 10 10 17 10 12 10 12 10 13 1 9 9 8 10 8 10 15 12 7 9 14 8 13 17 9 10 9 8 11 10 9 9 10 15 10 10 10 11 10 11 9 9 10 10 9 10 12 8 11 14 11 9 9 13 1 9 8 10 11 10 10 5 12 11 10 10 10 9 10 10 12 11 9 10 7 10 14 7 10 10 12 10 7 9 8 10 8 9 17 13 1 9 11 11 9 8 10 14 5 10 10 18 12 6 10 33 9 6 11 3 12 2 6 19 12 7 12 9 6 2 24 13 1 

Ele apenas imprimiu como eu escrevi - primeiro todas as palavras e depois do comprimento, mas eu não sei como fazer isso direito. Você poderia me dizer como posso imprimir palavras e diretamente sob o seu comprimento?

    
por Adrian 04.05.2016 / 00:38

1 resposta

0

Se eu entendi sua pergunta corretamente, você precisa usar algo como:

    for (y in len)
    {
            printf("%" len[y] "d ", len[y])
    }
    
por 01.06.2016 / 09:37

Tags