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"
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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.