我寫了一個醜陋的(也許)awk|sort|awk
線來完成這項工作。它也可以在一個awk過程中完成,但是,我有點懶惰,只是去骯髒和快速的方式。
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}'
讓我們看一個例子:
"Hello stackoverflow how are you today foo bar xoo yoo ooo"
嘗試用上面一行:
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
測試與你的第一個例子:
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個有趣的問題... – Kent 2013-02-15 11:20:43
使用'GNU awk'添加了一個進程解決方案。如果你有興趣見下面。乾杯。 – Steve 2013-02-16 16:58:19