我正在编写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
因为我认为这意味着转到由分隔符分隔的第二个字段。我搜查了一下;尝试了多个不同的cut
和sed
和grep
命令,但我似乎找不到具有我需要的正确选项的命令。任何帮助将非常感谢。谢谢。
答案 0 :(得分: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