$RANDOM変数を元に、ランダムな単語を取得してみます。
/usr/share/dict/wordsを使います。
(親記事はコチラ 中級者のためのLinuxコマンド入門)
まずは、/usr/share/dict/wordsの行数(単語数)を調べてみましょう。
wcは行数や単語数を調べることのできるコマンドです。
takk~$ wc -l /usr/share/dict/words 99171 /usr/share/dict/words
$RANDOMの範囲は0〜32767ですので、単純に$RANDOMで取得した数値では、/usr/share/dict/wordsの半分にも届きません。
確認してみます。
takk~$ sed -ne 32767p /usr/share/dict/words courtliest
上記のとおり、courtliest以前の単語しか得られませんが、今回は$RANDOMを加工せずに0〜32767の範囲のまま使います。
さて、sedを使って、$RANDOMで得た行番号についてprintすれば良いので、以下のようなコマンドがイメージできるかと思います。
takk~$ sed -ne '$RANDOMp' /usr/share/dict/words
しかし、これでは上手くいきません。
まず、変数名が変わっている点。
$RANDOMとpがつながっており、変数名がRANDOMpとなっています。
このような場合は、{}を使い、${RANDOM}pと書くことで、RANDOM変数とpコマンドを切り離すことができます。
次に、シングルクォートで囲まれている点。
bashではシングルクォートで囲むと、中にある変数は、値を展開できません。’$RANDOM’は、文字列$RANDOMと解釈されます。ダブルクォートを使わねばなりません。
書き直したコマンドを実行してみましょう。
takk~$ sed -ne "${RANDOM}p" /usr/share/dict/words Saroyan's
今度は上手くいきました。
ちなみに、ダブルクォートも省略できます。
takk~$ sed -ne ${RANDOM}p /usr/share/dict/words Galois
関連記事はコチラ
https://life-is-command.com/linux-command-beginner/
コメント
Delta Airlines
Good read, thanks.
Thanks.
Good read, thanks.
Interesting read.