本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、入力した内容をランダムな順番で出力する「shuf」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、入力した内容をランダムな順番で出力する「shuf」コマンドです。
「shuf」はファイルやキーボードから入力した内容をシャッフル(shuffle)して出力するコマンドです。乱数とは違い、同じものが2回出力されることはありません。「1から10までの数字をランダムな順番で1回ずつ出力する」といった使い方も可能です。
shuf [オプション] [ファイル名]
※[ ]は省略可能な引数を示しています
shufコマンドのオプションのうち、「-eオプション」と「-iオプション」を同時に使用することはできません。
短いオプション | 長いオプション | 意味 |
---|---|---|
-e リスト | --echo リスト | 「-e a b c」のように空白で区切ったリストをランダムに並べ替えて出力する |
-i 範囲 | --input-range=範囲 | 「-i 1-10」のように、「数値-数値」で指定した範囲の数値を出力する(小さい数を先に指定する) |
-n 行数 | --head-count=行数 | 出力する最大の行数を指定する |
-o ファイル名 | --output=ファイル名 | 結果をファイルに書き出す |
--random-source=ファイル名 | ランダムバイトのソースファイルを指定する | |
-z | --zero-terminated | 行末を改行文字ではなくNULL文字にする |
「shuf ファイル名」でテキストファイルの各行を“シャッフル”して、並べ替えてから出力します。並べ替えの順番はランダムです(画面1)。
「-n 行数」で出力する行数を指定します。ただし、ファイルの行数より多い数を指定しても無効です。
shuf ファイル名
(ファイルの行をランダムに並べ替えて出力する)(画面1)
shuf -n 行数 ファイル名
(ファイルの行をランダムに並べ替えて、指定した行数分だけ出力する)
「-e」オプションを使い、コマンドラインで指定したキーワードをランダムに並べ替えて出力します。キーワードは「-e key1 key2 key3」のようにスペースで区切って指定します(画面2)。
shuf -e キーワードリスト
(スペースで区切ったキーワードのリストをランダムに並べ替えて出力する)(画面2)
「-i」オプションで、数字をランダムに並べ替えて出力できます。
「-i」オプションでは、出力する範囲を付けて「-i 1-10」のように指定します(画面3)。「1-10」と指定した場合、1から10までの整数が全て1回ずつ出力されます。
shuf -i 範囲
(「数字-数字」で指定した範囲の数をランダムに並べ替えて出力)(画面3)
shuf -i 範囲 -n 個数
(数字をランダムに並べ替えて、指定した個数だけ出力)
shufコマンドの出力結果は乱数と似ていますが、実際には異なります。shufは指定された範囲の数字をシャッフルしているので、出力は乱数にはなりません。画面3のように各数の出現回数は1回ずつです。乱数なら同じ数が現れることがあります。
乱数が必要な場合は環境変数RANDOMや/dev/urandom、あるいはプログラミング言語が備える乱数用の関数を使用するとよいでしょう。
bash/zshでは、RANDOMを参照するごとに0から32767の整数を作り出します(画面4)。画面4ではbashの%演算子を用いて、0から9までの剰余を求め、それに1を加えて、1から10までの数を得ています。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.