linux_shell读文件,然后排序

这是一个使用bash shell脚本实现的功能,它首先读取名为mydata.txt的文件,然后对数据进行处理并存储到数组中。接着,脚本执行快速排序算法(q_sort)对数组进行排序。最后,它会打印原始和排序后的数组内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值