【至急】カレントにあるファイルをランダムに抽出するスクリプトで困っています。
bashであれば、以下のスクリプトでカレントにあるファイル名を標準出力します。
filenum=(`ls -1 | wc -l`)
files=(`ls -1`)
num=`expr $RANDOM % $filenum`
echo ${files[${num}]}
これと同じことをborne shallとawkしかないWebプラットフォーム上で実現したいのですが、配列が使えないため、困っています。
突然本日中に実現しないといけないため、みなさんのお知恵を拝借したいと存じます。
よい方法をご教授願います。
んー、乱数が難しいです。
もし、awk ではなく、nawk が使えるのであれば、こんな感じでいけます。
#! /usr/bin/sh
LIST=`ls`
N=`echo "$LIST" | wc -l`
echo "$LIST" | /usr/bin/nawk "
BEGIN {
srand()
i = int(rand() * ${N}) + 1
}
NR == i {
print
}
"
もうひとつ。
http://news.mynavi.jp/articles/2010/04/30/shell-random-number/index.html上記のページで、疑似デバイス /dev/random を使って乱数を取得する方法があるのを知りました。
もし、/dev/random があって、od コマンドが使えるなら、以下のような感じでいけます。
#! /usr/bin/sh
LIST=`ls`
N=`echo "$LIST" | wc -l`
RND=`od -vAn -N4 -tu4 < /dev/random`
echo "$LIST" | /usr/bin/awk "
BEGIN {
i = ${RND} % ${N}
}
NR == i {
print
}
"
乱数の精度は、こちらの方が高いです。