🏭

ブレース展開を使ったダミーデータの生成

2022/07/23に公開

シェルのブレース展開を使用したダミーデータの生成方法

環境

  • OS
    • MacOS
  • バージョン
% sw_vers
ProductName:	macOS
ProductVersion:	12.4
BuildVersion:	21F79

ブレース展開を使ったダミーデータの生成

ブレース展開を使うと{}内に並べた語句の全組み合わせが出力されます。
trでスペースを改行に変換

% echo {ab,cd}.{ef,gh}@{ij,kl}.{jp,com} | tr ' ' '\n'
ab.ef@ij.jp
ab.ef@ij.com
ab.ef@kl.jp
ab.ef@kl.com
ab.gh@ij.jp
ab.gh@ij.com
ab.gh@kl.jp
ab.gh@kl.com
cd.ef@ij.jp
cd.ef@ij.com
cd.ef@kl.jp
cd.ef@kl.com
cd.gh@ij.jp
cd.gh@ij.com
cd.gh@kl.jp
cd.gh@kl.com

4語以外のデータも作りたい

{}内に空の項目(カンマのみ)を記載します。
sedで余計なドット(.)を削除

% echo {ab,cd,}.{ef,gh}@{ij,kl}.{jp,com} | tr ' ' '\n' | sed 's/^\.//'
ab.ef@ij.jp
ab.ef@ij.com
ab.ef@kl.jp
ab.ef@kl.com
ab.gh@ij.jp
ab.gh@ij.com
ab.gh@kl.jp
ab.gh@kl.com
cd.ef@ij.jp
cd.ef@ij.com
cd.ef@kl.jp
cd.ef@kl.com
cd.gh@ij.jp
cd.gh@ij.com
cd.gh@kl.jp
cd.gh@kl.com
ef@ij.jp
ef@ij.com
ef@kl.jp
ef@kl.com
gh@ij.jp
gh@ij.com
gh@kl.jp
gh@kl.com

ランダムで並べたい

sortコマンドを-Rオプションで実行します。

% echo {ab,cd,}.{ef,gh}@{ij,kl}.{jp,com} | tr ' ' '\n' | sed 's/^\.//' | sort -R
cd.ef@ij.jp
cd.gh@kl.jp
ab.ef@ij.jp
ef@ij.com
gh@ij.com
ef@kl.com
ab.ef@kl.jp
cd.gh@ij.jp
cd.ef@kl.com
gh@kl.jp
ab.ef@ij.com
cd.gh@ij.com
gh@kl.com
cd.ef@ij.com
cd.ef@kl.jp
ab.gh@kl.com
ab.ef@kl.com
ef@ij.jp
ab.gh@ij.jp
ab.gh@ij.com
ef@kl.jp
gh@ij.jp
cd.gh@kl.com
ab.gh@kl.jp

もっと楽して色々な単語のドメインを含んだデータを作成したい

/usr/share/dict/wordsという英単語を含んだファイルがあり、これを使います。

% wc -l /usr/share/dict/words
  235886 /usr/share/dict/words
% head /usr/share/dict/words 
A
a
aa
aal
aalii
aam
Aani
aardvark
aardwolf
Aaron

shuf -n1でシャッフルした上で1つ選ぶようにして、seqで100回実行させます。
サブドメインが無いデータを作るためにわざわざnoword.を最後に削除しています。(もっとスマートにしたい😥)

% seq -f 'echo $(shuf -n1 -e www api noword).$(cat /usr/share/dict/words|shuf -n1).$(shuf -n1 -e {com,org,{co.,ne.,}jp,net}) # %g' 100 | bash | sed 's/^noword\.//'
www.tulipomaniac.jp
api.headforemost.jp
margent.com
api.testiculate.jp
rah.org
protocorm.net
api.pathognomy.net
api.equiproportional.net
api.bellow.net
www.exosporium.org

Discussion