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추가 됩니다 . 마지막으로 기존 요소를 반복하여 으로 출력합니다 . 단, 마지막 요소는 no 를 얻습니다 .strr[i]_strr"<element>_",,

관련 정보