linux使用shell 进行文件数据的读取与排序

题目

shell脚本语言编写一个从键盘输入10名学生(含自己)的姓名、 性别、学号和家庭住址,然后按照学号排序,并将排序后的结果在屏幕上按对齐 的方式打印输出的程序。

代码

  1. 读入数据
  2. 数据排序(这里用的选择排序)
  3. 数据输出
#!/bin/bash

declare -a username
declare -a sex
declare -a usercode
declare -a userpath

i=0

# scan data from keyboard or pipe
# cat ../test | while read line
for line in `cat ../test`;
do
    index=`expr $i / 4`
    pos=`expr $i % 4`
    if [ $pos -eq 0 ]
    then
        username[$index]=${line}
    elif [ $pos -eq 1 ]
    then
        sex[$index]=${line}
    elif [ $pos -eq 2 ]
    then
        usercode[$index]=${line}
    else
    userpath[$index]=${line}
    fi
    # echo $i, ${usercode[$i]}
    # echo ${username[$i]}, ${sex[$i]}, ${usercode[$i]}, ${userpath[$i]}
    i=$(($i+1))
done

arr=(0 1 2 3 4 5 6 7 8 9)

i=0
j=0

# sort it with ascending
while [ $i -lt 10 ]; do
    j=$(($i+1))
    while [ $j -lt 10 ] ; do
        # echo ${usercode[${arr[$j]}]} ,  ${usercode[${arr[$i]}]}
        if  [ ${usercode[${arr[$j]}]} -lt ${usercode[${arr[$i]}]} ]
        then
            tmp=${arr[$j]}
            arr[$j]=${arr[$i]}
            arr[$i]=$tmp
        fi

        j=$(($j+1))
    done

    i=$(($i+1))
done

# echo ${arr[@]}
i=0
while [ $i -lt 10 ]; do
    index=${arr[$i]}
    printf "%8s %6s %4s %10s\n" ${usercode[$index]}, ${username[$index]}, ${sex[$index]}, ${userpath[$index]}
    i=$(($i+1))
done

转载于:https://www.cnblogs.com/Draymonder/p/11028412.html

你可能感兴趣的:(linux使用shell 进行文件数据的读取与排序)