0

私はシェル スクリプトを書いており、生徒とその情報のファイル (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デリミネータで区切られた2番目のフィールドに移動することを意味すると思うので、使用しました。私は検索して検索しました。cut複数の異なるコマンドとコマンドsedを試しgrepましたが、必要な正しいオプションを備えたコマンドが見つからないようです。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

あなたのコード サンプルでは、​​並べ替えコマンドは実際には標準入力から読み取る必要があります。

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 に答える