
다음과 같은 긴 문자열 목록이 있습니다.
_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 를 얻습니다 ,
.