やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

日本人の名字をランダム生成する

 Bashで作ったコマンドツール。

成果物

 引数など詳しくは上記参照。

デモ

 ランダム生成する。

$ jln.sh
いずいけ    泉池
たけやま    竹山
ほがり   帆苅
はんがいし 半下石
いがた   伊形
おおづつ    大筒
あらいずみ 荒泉
きたいち    北市
いわはた    岩畑
なみもと    浪本
ささもと    佐々本
たかべ   髙部
てなわ   手縄
まきだいら 槙平
うえおく    上奥
きつい   橘井
こがわ   古川
かもさか    加茂坂
おぎさわ    荻澤
しおはま    塩浜
まきぐち    巻口
うるしの    漆野
まつほ   松保
たてさわ    舘澤
おおいで    大井手
おおのこ    大鋸
かとうぎ    加藤木
もりみょう 森明
いいほし    飯干
そねだ   曾根田

 ざっくり抽出する。

$ jln.sh s 'あかさ'
あかさか    赤坂
あかさか    赤阪
あかさか    紅坂
あかさき    赤崎
あかさき    赤﨑
あかさき    赤嵜
あかさき    明崎
あかさき    赤嵜
あかさき    赤碕
あかさこ    赤迫
あかさこ    赤窄
あかさこ    赤硲
あかさこ    赤﨏
あかさわ    赤沢
あかさわ    赤澤

 細かく抽出する。前方一致、後方一致、完全一致を糖衣構文で抽出できる。否定形も表現できる。

$ jln.sh e -f 'あかさ' -B ''
あかさき    赤崎
あかさき    赤﨑
あかさき    赤嵜
あかさき    明崎
あかさき    赤嵜
あかさき    赤碕
あかさこ    赤迫
あかさこ    赤窄
あかさこ    赤硲
あかさこ    赤﨏
あかさわ    赤沢
あかさわ    赤澤

 正規表現で抽出する。

$ jln.sh s '^あか[さざ]き$'
あかさき    赤崎
あかさき    赤﨑
あかさき    赤嵜
あかさき    明崎
あかさき    赤嵜
あかさき    赤碕
あかざき    赤崎
あかざき    赤﨑
あかざき    赤碕

 正規表現の否定形。

$ jln.sh e -R '^赤.{1}$' -b 'さき' | wc -l
472

DB

 名字データベース。

 このTSVファイルから抽出する。Linuxコマンドを使って。900KB近くある。

Linuxコマンド概要

 以下のコマンドをベースにして作成した。

  • cat, shuf, awk

 TSVをすべて出力する。

DB=surnames.tsv
cat "$DB"

 TSVからランダムに30行だけ出力する。

NUM=30
cat "$DB" | shuf -n $NUM

 TSVから1列目と2列目が重複する行を排除してからランダムに30行だけ出力する。

COND_UNIQ='!a[$1]++ && !b[$2]++'
cat "$DB" | awk -F "\t" "$COND_UNIQ" | shuf -n $NUM
  • awk
    • -F "\t": タブ文字で分解する
    • $1, $2: 1列目, 2列目
    • $1 ~ /正規表現/: 正規表現に一致するなら出力する
    • $1 !~ /正規表現/: 正規表現に一致しないなら出力する
パターン
正規表現 /値/
部分一致 /値/
完全一致 /^値$/
前方一致 /^値.*$/
後方一致 /.*値$/

 正規表現と部分一致が同じ。部分一致は/.*値.*/のようにしてもいいはず。

名字?

 名字・苗字・氏・姓・家名ともいう。紛らわしい。じつはこれらは歴史的に別物らしい。

所感

 思いつきで作った。名字だけでなく名前のほうも欲しい。

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux