linux_shell讀文件,然後排序

#!/bin/bash

function GetNumber
{
newarray=$1
j=0
oldIFS=$IFS  #定義一個變量爲默認IFS
IFS=$'\r\n'  #設置IFS爲換行符號\x0A
echo "zheli"
for line in `cat mydata.txt`
do
    #echo "line:$line"
    #echo "$line">>file.txt
    i=1
    oldIF=$IFS    #定義一個變量爲默認IFS
    IFS='|'        #設置IFS爲"|"符號
    for str in $line
    do
        if [ $i -eq 2 ] && [ $i != "" ];
            then  eval ${newarray}[${j}]=${str} ; echo "xianzai ${j}: $(eval echo \$\{${newarray}[${j}]\})" #echo "$str">>file.txt ;
            j=`expr $j + 1`
        elif [ $i -gt 2 ]
            then break
        fi
        i=`expr $i + 1`
        IFS=$oldIF  #還原IFS爲默認值
    done
    if [ $j -gt 600 ]
        then break
    fi
        
done
echo "nali"
IFS=$oldIFS  #還原IFS爲默認值
#echo "Finish Read Number````"
#echo "total number is : $j"
#echo ${newarray[*]}
echo $(eval echo \$\{${newarray}[*]\})
}


q_sort()
{
    local array=${3}
       local left=${1}
    local right=${2}
    local i=${1}
    local j=${2}
    local mid
    let mid=(left+right)/2
        eval local midValue=\$\{${array}[${mid}]\}

    [ ${left} -gt ${right} ] && return

    while [ ${i} -le ${j} ]
    do
        while [ ${i} -lt ${right} -a ${midValue} -lt $(eval echo \$\{${array}[${i}]\}) ]; do
            let i++;done
        while [ ${j} -gt ${left} -a ${midValue} -gt $(eval echo \$\{${array}[${j}]\}) ]; do
            let j--;done
        
        if [ ${i} -le ${j} ]; then
            temp=$(eval echo \$\{${array}[${i}]\})
            eval ${array}[${i}]=\$\{${array}[${j}]\}
            eval ${array}[${j}]=$temp
            let i++
            let j--
            #echo "daozheli"
        fi
    done

    if [ ${i} -lt ${right} ];then
        q_sort ${i} ${right} ${array}
    fi
    if [ ${j} -gt ${left} ];then
        q_sort ${left} ${j} ${array}
    fi

echo $(eval echo \$\{${array}[*]\})
}


arr=(1 2 3 4 5)
echo "The original array is: ${arr[*]}"
 
echo "hi"
GetNumber arr
echo "hello"

length=600
echo "以前的:"
#arr=(2 5 6 8 8 3 4 345 1356 21)
for((i=0;i<length;i++)); do
        printf "%d " ${arr[${i}]}
    printf "\n"
    done

q_sort 0 599 arr

echo "現在的: "
for((i=0;i<length;i++)); do
        printf "%d " ${arr[${i}]}
    printf "\n"    
    done
printf "\n"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章