2016-04-28 35 views
0

嗨我的課上有作業,其中一部分是按其長度排序字符串列表。不使用awk或sed對字符串排序

我們不能使用awksed,只有bash。可以說我有一些看起來像這樣:

ten 
car 
something 
plane 
stack 
overflow 

排序的最終結果應該是

something 
overflow 
stack 
plane 
ten 
car 

這意味着在上面的時間越長的話,如果他們是按照字母順序相同的尺寸。

這是我到目前爲止已經試過:

extSort(){ 
    total=$(cat $file| wc -w) 
    count="$(cat $file | tr ' ' '\n' | tr -d '[:punct:]' | sort | uniq -c | sort -k1,1nr -k2 -n)" 
    while read line; do 
     if [ $(echo $line | wc -w) -eq 1 ]; then 
      continue 
     fi 
    current=$(echo $line | cut -d " " -f 1) 
    percent=$(echo "$current/$total*100" | bc -l) 
    round=$(echo "scale=2; $percent/1" | bc -l)"%%" 
    printf "$line "$round"\n" done <<<"$input" 
} 
+4

所以,你要我們做的功課? –

+1

我已經做了像97%的問題是我不能找出這一個我有一個列表1500線長,沒有找到任何東西在線,所以幫助不應該是一個問題:) – Demian

+3

好的好所以din't毫不猶豫地張貼在問題 – anubhava

回答

0
$ echo "ten 
car 
something 
plane 
stack 
overflow" | while read -r line || [[ -n "$line" ]]; do echo "${#line} ${line}"; done | sort -r -k 1,2 | cut -d ' ' -f 2 
something 
overflow 
stack 
plane 
ten 
car 
$ 
相關問題