2011-02-05 11 views
0

実行時に4つの数字を入力し、スクリプトで数字を並べ替えて印刷するUnixシェルスクリプトを作成しようとしています。Unixシェルスクリプトで入力を並べ替える

どうすればいいですか?

はあなたが標準入力から読み込み、lexicographycally各行をソート「ソート」ユーティリティを使用することができます

アンディ

+1

は宿題 –

+0

のようなにおいがもう一つの方法は、単純なソートを書くための割り当ては日常的であるか、 'sort'ユーティリティを使用することができますか?これまでに何を試しましたか?それを聞くのはちょっと遅いですが。 –

+0

ありがとうございました、はいDennis私はこの宿題に悩まされていましたが、混乱しましたが、現在はうまくいきます:-) – Andy

答えて

1

、あなたの助けをいただき、ありがとうございます。

例として、次のことが確認できます。

echo -e "1\n6\n2\n3" | sort -n 

を出力する:

1 
2 
3 
6 

だけ出力ソート

+0

質問は約**数値**ソートだったので、ソートの '-n'オプションについて言及してください。 –

+0

あなたは正しいです!それについて忘れてしまった... – mfontanini

+0

ありがとうございます:-) – Andy

4

にあなたの入力を仮定すると、それぞれ別の行に番号、およびパイプ$a$b$c$dにあります。

printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort 
+3

また、 'printf"%s \ n "$ a $ b $ c $ d ..."と書くこともできます - printfは余分な引数の書式文字列を繰り返します –

+0

@glennありがとう、私はdidn知っている。私はCのprintf関数の構文についていた: –

+0

ありがとう:-) – Andy

1

値を読み取り、並べ替えプログラムにエコーする必要があります。

echo -n "Enter 1st number: " 
read a junk 
echo -n "Enter 2nd number: " 
read b junk 
echo -n "Enter 3rd number: " 
read c junk 
echo -n "Enter 4th number: " 
read d junk 
{ echo $a; echo $b; echo $c; echo $d; } | sort -n 

唯一の問題は、echoコマンドの後に改行を抑制するための表記です。 2つの表記法があり、異なるシステムでは異なる表記法を使用しています。古い表記はecho -nです。新しい表記法は次のとおりです。

echo "Enter Nth number: \c" 

使用する必要があるシステムは、システムによって異なります。

'junk'変数は、入力行の最初の単語の後の余分な単語を収集します。それはパラノイアの一種ですが、ユーザーが'12 abc 'と入力すると、一文字の変数は残りの部分ではなく'12'になります。コードは、ユーザーが番号を入力したことを検証しません。あなたはそれを行う関数を書くことができ、それを4回使うことができます。プロンプト文字列を取り、数値を返すこともできます。あなたがbashを使用する場合、readコマンドははるかに強力であり、代わりにreadに(bash以外に)非ポータブル用echo表記法で表記し、同様プロンプト側ステッピングトリッキーな問題を行うことができます

注意。 echo表記を除いて、表示されているコードはBourneシェルから第7版(またはバージョン7)のUNIX(echoはシェル組み込みではなく、-nオプションを使用していました)および派生品(Korn、Bash、POSIX、 ...)。

+0

ありがとうso much much :-) – Andy

+0

Ok Jonathan、ありがとう、たくさんの仲間。私のシステムではとてもうまく働いていました:-) – Andy

3

read -p "Enter 1st number: " a 
read -p "Enter 2nd number: " b 
read -p "Enter 3rd number: " c 
read -p "Enter 4th number: " d 
printf "%s\n" $a $b $c $d | sort 
+0

ありがとうございます:-) – Andy

関連する問題