AWK - 在 END 中以两行打印文件和长度

AWK - 在 END 中以两行打印文件和长度

我必须在 AWK 中编写脚本,它将选择行中较长的字段,然后最终在两行字段和(第二行)长度下显示。

我做的:

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])
        }
}

但结果:(..)非 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 

它只是按照我写的打印出来——首先是所有单词,然后是其长度,但我不知道如何做对。你能告诉我如何打印单词并直接打印其长度吗?

答案1

如果我正确理解了你的问题,你需要使用类似以下内容:

    for (y in len)
    {
            printf("%" len[y] "d ", len[y])
    }

相关内容