次のような長い文字列があります。
_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>_",
,