pisałem brzydki (być może) awk|sort|awk
linii, aby wykonać zadanie. Można to zrobić w jednym procesie awk, jednak jestem trochę leniwy, po prostu idę na brudną i szybką drogę.
echo yourStr|awk '{
split($0,o); for(x in o) print length(o[x]),o[x]}'|sort -n|awk '!p{printf $2;p=$1;next}$1==p{printf " "$2}$1!=p{printf "\n"$2;p=$1}'
weźmy przykład:
"Hello stackoverflow how are you today foo bar xoo yoo ooo"
spróbować z powyższej linii:
kent$ echo "Hello stackoverflow how are you today foo bar xoo yoo ooo"|awk '{
split($0,o); for(x in o) print length(o[x]),o[x]}'|sort -n|awk '!p{printf $2;p=$1;next}$1==p{printf " "$2}$1!=p{printf "\n"$2;p=$1}'
are bar foo how ooo xoo yoo you
Hello today
stackoverflow
test z pierwszego przykładu:
kent$ echo "A a b B cc ca cd" |awk '{
pipe quote> split($0,o); for(x in o) print length(o[x]),o[x]}'|sort -n|awk '!p{printf $2;p=$1;next}$1==p{printf " "$2}$1!=p{printf "\n"$2;p=$1}'
a A b B
ca cc cd
+ 1 interesujący problem ... – Kent
Dodano pojedyncze rozwiązanie procesowe, używając 'GNU awk'. Jeśli jesteś zainteresowany, patrz poniżej. Twoje zdrowie. – Steve