2016-05-11 5 views
1

ls出力から2桁の数字のセットを抽出し、後で使用するためにその数字から最大値と最小値を得ることができます。私はこれをやっているls出力を整数に変換する

:首を長くしての ls 14_data_*.log | egrep -o '[0-9]{2,2}' | head -1}が、出力は昇順でのみ時々あるとheadtailは間違った値を返します。私はそれを整数に変換しようとしましたが、絶望的でした。

返品はlsで、どのように処理できますか?

+0

'ls 14_data _ *。log .'は実際のファイル名とは何ですか? –

+0

ソートされていないデータがある場合は、 'head'を使う前に' sort'を通してパイプすることができます。 – Lucas

+0

'ls'の出力は です。http://pastebin.com/sTcWyKYz そして' | egrep -o '[0-9] {3,3}' http://pastebin.com/9hajXqLL また、不明なジャンク番号が含まれています。 –

答えて

2

lsは、現在のディレクトリ内のファイルとディレクトリのリストを返します。

私はあなたが点で最大ですが、ここではあなたの問題を解決するには、 sortを使用しているかわからない

降順:

ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -nr 

昇順:

ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -n 
+0

実際に並び替えられましたが、余分な数字が残っています。ありがとう! :) –

1

Iドン本当にあなたはここでlsを使う必要があると思っています。あなたはファイル名が改行文字が含まれていないことを確認している場合は、これを使用することができます

printf '%s\n' 14_data_*.log | grep -Eo '[0-9]{2}' 

その後、パイプをそのsort -nに、-rでソート順序を逆にします。

0

私はこれがXY problemだと思います。

私が理解していること:グロブに一致するいくつかのファイルが現在のディレクトリ14_data_[0-9][0-9].logにあります。そして、グロブ[0-9][0-9]から最小値と最大値を抽出したいとします。それぞれ最小値と最大値として、あなたは数字0987をしたいリスト

14_data_1.log 
14_data_09.log 
14_data_13.log 
14_data_87.log 
14_data_aa.log 

を与え

例えば、。

ここでは、この達成するためのシンプルな純粋なバッシュの方法です:

shopt -s nullglob 

files=(14_data_[0-9][0-9].log) 

fnumbers=("${files[@]#14_data_}") 
fnumbers=("${fnumbers[@]%.log}") 

if ((${#fnumbers[@]} == 0)); then 
    echo "No files found." 
else 
    printf 'min=%d\nmax=%d\n' "$((10#${numbers[0]}))" "$((10#${numbers[-1]}))" 
fi 
  • shopt -s nullglob:一致するすべてのファイル
  • fnumbers=("${files[@]#14_data_}")で配列filesを移入:なし一致が
  • files=(14_data_[0-9][0-9].log)場合グロブは何に展開させると:配列fnumbersfilesのフィールドを入力してください。先頭の14_data_が削除されています
  • fnumbers=("${fnumbers[@]%.log}")(09 13 87):この時点で、この配列

から後続.logを削除するには、(例えば、場合に)含む配列fnumbersを有します。

最後に、この配列の最初と最後の要素を選択して、最低と最高の番号を取得します。

関連する問題