ランダムな単語を得る(sed内でbash変数を使う)

$RANDOM変数を元に、ランダムな単語を取得してみます。
/usr/share/dict/wordsを使います。

まずは、/usr/share/dict/wordsの行数(単語数)を調べてみましょう。
wcは行数や単語数を調べることのできるコマンドです。

$ wc -l /usr/share/dict/words
99171 /usr/share/dict/words

$RANDOMの範囲は0〜32767ですので、単純に$RANDOMで取得した数値では、/usr/share/dict/wordsの半分にも届きません。
確認してみます。

$ sed -ne 32767p /usr/share/dict/words
courtliest

上記のとおり、courtliest以前の単語しか得られませんが、今回は$RANDOMを加工せずに0〜32767の範囲のまま使います。

さて、sedを使って、$RANDOMで得た行番号についてprintすれば良いので、以下のようなコマンドがイメージできるかと思います。

$ sed -ne '$RANDOMp' /usr/share/dict/words

しかし、これでは上手くいきません。
まず、変数名が変わっている点。
$RANDOMとpがつながっており、変数名がRANDOMpとなっています。
このような場合は、{}を使い、${RANDOM}pと書くことで、RANDOM変数とpコマンドを切り離すことができます。
次に、シングルクォートで囲まれている点。
bashではシングルクォートで囲むと、中にある変数は、値を展開できません。’$RANDOM’は、文字列$RANDOMと解釈されます。ダブルクォートを使わねばなりません。

書き直したコマンドを実行してみましょう。

 
$ sed -ne "${RANDOM}p" /usr/share/dict/words
Saroyan's

今度は上手くいきました。
ちなみに、ダブルクォートも省略できます。

$ sed -ne ${RANDOM}p /usr/share/dict/words
Galois

5 responses to “ランダムな単語を得る(sed内でbash変数を使う)

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA