2012-01-10 8 views
1

を注文する方法シェルスクリプト - ...共通の名前を持つすべてのファイルを取得し、だから私はシェルスクリプトがいかに強力で学び、それを愛するが、これには本当に苦労していますよ、それらのファイル

私はたくさんのファイルを持っています: チェックイン10 checkin.11 チェックイン0.12

常に#になり、順番に上に行く。

私はディレクトリ内のファイル*。すべてのチェックインを見つける必要があり、ファイル名の最高#でファイルを返します。上記のファイルの場合、私は 'checkin.12'を返す必要があります。私のロジックは、すべてのチェックイン。*ファイル名を取得し、それらをループし、変数に格納されている前のファイルの#と比較することでした。現在のファイルの#が高い場合は、変数#を現在のファイルに更新します#、それが低い場合は次のファイルに移動します。このようにして、私はチェックインを得ることができます。最高の#として返され、私はチェックインで何をする必要がありますか?これを行うにはより良い方法が必要です。誰かが私に別のアプローチの例を示すことができることを期待していました。

答えて

4
ls checkin.* | sort -t. -n | tail -1 
+0

ああ男! 'sort'どうしたの?私は今汚れている。もしあなたが 'head'を使いたいのであれば' ls checkin。* |ソート-t。 -rn | head -n + 1'または 'head -n +1 <(sort -t。-rn <(ls checkin。*))'しかし、うまくやった! –

+0

素晴らしい。ちょうど素晴らしい。 – user797963

+0

'sort'コマンドには、実際には見落としや不注意があります。最初のフィールドを数値的にソートします(これは 'checkin'という名前なので、常に等しくゼロにソートされます)。次に実際の数値の接尾辞がソートされます。 'sort -t 'を使ってパフォーマンスをわずかに向上させることができます(私はあなたがそれを測定できるとは確信していません)。 -k 2n'(2番目の列で数値的にソート)。今回の結果は同じです。時々、私はただ幸運になる。 –

関連する問題