実行時に4つの数字を入力し、スクリプトで数字を並べ替えて印刷するUnixシェルスクリプトを作成しようとしています。Unixシェルスクリプトで入力を並べ替える
どうすればいいですか?
はあなたが標準入力から読み込み、lexicographycally各行をソート「ソート」ユーティリティを使用することができます
アンディ
実行時に4つの数字を入力し、スクリプトで数字を並べ替えて印刷するUnixシェルスクリプトを作成しようとしています。Unixシェルスクリプトで入力を並べ替える
どうすればいいですか?
はあなたが標準入力から読み込み、lexicographycally各行をソート「ソート」ユーティリティを使用することができます
アンディ
、あなたの助けをいただき、ありがとうございます。
例として、次のことが確認できます。
echo -e "1\n6\n2\n3" | sort -n
を出力する:
1
2
3
6
だけ出力ソート
質問は約**数値**ソートだったので、ソートの '-n'オプションについて言及してください。 –
あなたは正しいです!それについて忘れてしまった... – mfontanini
ありがとうございます:-) – Andy
にあなたの入力を仮定すると、それぞれ別の行に番号、およびパイプ$a
、$b
、$c
、$d
にあります。
printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort
また、 'printf"%s \ n "$ a $ b $ c $ d ..."と書くこともできます - printfは余分な引数の書式文字列を繰り返します –
@glennありがとう、私はdidn知っている。私はCのprintf関数の構文についていた: –
ありがとう:-) – Andy
値を読み取り、並べ替えプログラムにエコーする必要があります。
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、 ...)。
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
ありがとうございます:-) – Andy
は宿題 –
のようなにおいがもう一つの方法は、単純なソートを書くための割り当ては日常的であるか、 'sort'ユーティリティを使用することができますか?これまでに何を試しましたか?それを聞くのはちょっと遅いですが。 –
ありがとうございました、はいDennis私はこの宿題に悩まされていましたが、混乱しましたが、現在はうまくいきます:-) – Andy