ls
出力から2桁の数字のセットを抽出し、後で使用するためにその数字から最大値と最小値を得ることができます。私はこれをやっているls出力を整数に変換する
:首を長くしての ls 14_data_*.log | egrep -o '[0-9]{2,2}' | head -1}
が、出力は昇順でのみ時々あるとhead
、tail
は間違った値を返します。私はそれを整数に変換しようとしましたが、絶望的でした。
返品はls
で、どのように処理できますか?
ls
出力から2桁の数字のセットを抽出し、後で使用するためにその数字から最大値と最小値を得ることができます。私はこれをやっているls出力を整数に変換する
:首を長くしての ls 14_data_*.log | egrep -o '[0-9]{2,2}' | head -1}
が、出力は昇順でのみ時々あるとhead
、tail
は間違った値を返します。私はそれを整数に変換しようとしましたが、絶望的でした。
返品はls
で、どのように処理できますか?
ls
は、現在のディレクトリ内のファイルとディレクトリのリストを返します。
sort
を使用しているかわからない
:
降順:
ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -nr
昇順:
ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -n
実際に並び替えられましたが、余分な数字が残っています。ありがとう! :) –
Iドン本当にあなたはここでls
を使う必要があると思っています。あなたはファイル名が改行文字が含まれていないことを確認している場合は、これを使用することができます
printf '%s\n' 14_data_*.log | grep -Eo '[0-9]{2}'
その後、パイプをそのsort -n
に、-r
でソート順序を逆にします。
私はこれがXY problemだと思います。
私が理解していること:グロブに一致するいくつかのファイルが現在のディレクトリ14_data_[0-9][0-9].log
にあります。そして、グロブ[0-9][0-9]
から最小値と最大値を抽出したいとします。それぞれ最小値と最大値として、あなたは数字09
と87
をしたいリスト
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)
場合グロブは何に展開させると:配列fnumbers
にfiles
のフィールドを入力してください。先頭の14_data_
が削除されていますfnumbers=("${fnumbers[@]%.log}")
:(09 13 87)
:この時点で、この配列から後続.log
を削除するには、(例えば、場合に)含む配列fnumbers
を有します。
最後に、この配列の最初と最後の要素を選択して、最低と最高の番号を取得します。
'ls 14_data _ *。log .'は実際のファイル名とは何ですか? –
ソートされていないデータがある場合は、 'head'を使う前に' sort'を通してパイプすることができます。 – Lucas
'ls'の出力は です。http://pastebin.com/sTcWyKYz そして' | egrep -o '[0-9] {3,3}' http://pastebin.com/9hajXqLL また、不明なジャンク番号が含まれています。 –