0

我正在编写 shell 脚本,我有一个学生文件及其信息(inputFile.txt):

Bonerake:Nicole:1011:410-111-0500:CS:09-12-1985
Fugett:Brandon:8188:410-111-0020:Biology:06-29-1982
Bozick:Julia:0333:410-111-0900:English:01-18-1984
Freeman:Andrew:7747:410-111-0060:Business:03-14-1988
Carroll:Sandra:4044:410-111-0000:History:12-19-1987
Everett:Terry:8666:410-111-0100:CS:01-24-1986
Boyer:Dennie:2212:410-111-0080:Math:08-02-1983

我应该根据用户输入的信息的哪一部分(即名字、姓氏等)进行排序。我可以对姓氏执行此操作,因为它是每行中的第一个。但是,我似乎无法了解任何其他信息。这是我尝试按名字排序的方法,但没有任何反应:

sortStudents(){
echo -e "Which information would you like to sort students by?"
echo -e "\t1) Last Name"
echo -e "\t2) First Name"
echo -e "\t3) Student ID"
echo -e "\t4) Phone Number"
echo -e "\t5) Major"
echo -e "\t6) Birthday"
echo -e "\t*** Input choice: \c"
read choice

case "$choice" in
    1) sort inputFile.txt -o inputFile.txt ;;
    2) cut -d: -f2 inputFile.txt | sort inputFile.txt -o inputFile.txt ;;
esac

return $TRUE
}

我使用-f2是因为我认为这意味着转到由分隔符分隔的第二个字段。我找了又找;尝试了多个不同的cutand sedandgrep命令,但我似乎找不到具有我需要的正确选项的命令。任何帮助将不胜感激。谢谢你。

4

1 回答 1

0

在您的代码示例中, sort 命令确实应该从标准输入中读取:

2) cut -d: -f2 inputFile.txt | sort - -o inputFile.txt ;;

(这可能是它看起来没有排序的原因)

但是,在这种情况下,您应该使用 sort 的内置选项:

sort -t: -k$choice inputFile.txt -o inputFile.txt 

手册页描述了这些选项:

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

   -t, --field-separator=SEP
          use SEP instead of non-blank to blank transition
于 2013-10-17T05:52:07.117 回答