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

3-1.部分抽出

$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/

コメント

  1. Delta Airlines

  2. Good read, thanks.

  3. Thanks.

  4. Good read, thanks.

  5. Interesting read.

タイトルとURLをコピーしました