如何使用 awk 重新组合具有相同长度的字符串

如何使用 awk 重新组合具有相同长度的字符串

我有一长串这样的字符串:

_ah_
_asn_
_ai_
_errr_
_an_

我想把它改成这样

"_ah_ai_an_",
"_asn_",
"_errr_"

我努力了 :

cat file | awk '{ print length, $0 }' | sort -n -s | cut -d" " -f2-

它本质上是按长度排序的,但我想做的是将长度相同的内容放在同一行,并使用 ","As 分隔符

答案1

$ cat tst.awk
{
    lgth = length($0)
    sub(/_$/,"",strs[lgth])
    strs[lgth] = strs[lgth] $0
}
END {
    for (lgth in strs) {
        printf "%s\"%s\"", sep, strs[lgth]
        sep = "," ORS
    }
    print ""
}

$ awk -f tst.awk file
"_ah_ai_an_",
"_asn_",
"_errr_"

答案2

这给出了您想要的输出:

awk -F_ '
    {strr[length] = strr[length]"_"$2}
    length > max {max=length}
    END {
        for (i=1;i<max;i++) {if (strr[i]) print "\"" strr[i]"_\","}
        print "\"" strr[max]"_\""
    }' file

有长度的行i附加strr[i]一个前导_。最后,我们只是循环遍历现有strr元素并用 输出它们"<element>_",,除了最后一个元素,它得到 no ,

相关内容