Linux でテキストからランダムに 1行取得する

おひさしぶりです。

cowsay コマンドでランダムに絵柄を変えたいと思っていたんですが、 そのためにはランダムで絵柄を指定する必要があります。

絵柄の一覧は次のようなコマンドで取得できます。

$ cowsay -l | grep -v "^Cow"

ここから、ランダムに 1行取得します。 最初は Bash の配列を使って 次のようにやってました。

$ LIST=(`cowsay -l | grep -v "^Cow"`)
$ FMT=${LIST[$(($RANDOM % ${#LIST[@]}))]}

1行でできないかと調べていたら sort コマンドには -R オプションが あったりすることを知りました。

次のようになりました。

$ cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | sort -R | head -n 1

cowsay と fortune も入れて、これで完成です。

$ fortune | cowsay -n -f `cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | sort -R | head -n 1`

・・・と思っていたら、shuf なんてコマンドもあるようで 次のようになりました。

$ fortune | cowsay -n -f `cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | shuf -n 1`

色々とありますね。

テキスト処理は覚えておくと、開発中のちょっとしたことに使えて便利なので 遊びながら覚えていきたいものです。

Google サイト内検索

Amazonアソシエイト