Linux下的随机身份生成

如果您需要生成一个名称和地址列表来测试您正在处理的应用程序或脚本,Linux可以让这变得异常简单。有一个名为“rig”的命令可以创建姓名、地址和电话号码列表。据我所知,开箱即用,只适用于美国地址和区号。然而,如果情况确实如此,您也许能够解决这个问题。

要使用rig命令,只需在命令行中键入“rig”,就会生成一个名称和地址。您将看到如下内容:


    $ rig
Mavis English
1015 Tulip St
Anderson, IN  46018
(317) xxx-xxxx

    

要生成包含多个地址的列表,请使用-c选项并指定要查看的地址数。


    $ rig -c 3
Curt Rhodes
750 Orrand Dr
Kinston, NC  28501
(919) xxx-xxxx

Glenna Sheppard
531 Buncaneer Dr
Seattle, WA  98109
(206) xxx-xxxx

Georgina Burke
840 Plinfate St
Orlando, FL  32802
(407) xxx-xxxx

    

您可能已经注意到,这些身份记录中的电话号码有一个区号,但电话号码只有一系列的x。在这篇文章的后面,我将演示一种方法,你可以超越这一点。

如果出于某种原因,在生成的列表中只需要男性或女性姓名,则可以使用-m(男性)或-f(女性)选项。


    $ rig -c 3 -m                       $ rig -f -c 3
Eduardo Mathis                      Alicia Lara
183 Kennel Ln                       853 Willow Rd
Appleton, WI  54911                 Roanoke, VA  24022
(414) xxx-xxxx                      (703) xxx-xxxx

Tristan Mckee                       Mindy Romero
608 Lake Dr                         846 Burnet Dr
Miami, FL  33152                    Emporia, KS  66801
(305) xxx-xxxx                      (316) xxx-xxxx

Randy Chavez                        Ina Morris
654 Bourg St                        556 Cedarwood Ln
Spokane, WA  99210                  Passadena, CA  91109 <== oops!
(509) xxx-xxxx                      (818) xxx-xxxx

    

很容易将输出重定向到一个文件以保存它以供您使用。


    $ rig -c 100 > IDs
    

将rig命令放到脚本中可能会使它更易于使用,尽管它不会给命令添加太多内容。在这个gen\u random\u IDs脚本中,我们提示用户要生成的标识记录的数量,并将输出重定向到一个文件中。它使用bash PID来随机化文件名(例如IDs.3255),以降低同名文件已经存在的可能性。


    #!/bin/bash

if [ $# == 0 ]; then
    echo -n "number of records to generate> "
    read num
else
    num=$1
fi

rig -c $num > IDs.$$
echo "$num identity records are in the IDs.$$ file"

    

您还可以将装备命令转换为简单的bash别名:


    alias genIDs='rig -c 1000 > IDs'

    

添加电话号码

如果你想看到电话号码代替所有的xxx-xxxx字符串,你可以做更多的工作来实现这一点。您可以创建随机的虚拟电话号码,以配合您的虚拟身份。在下一个脚本中,我使用一个名为RANDOM的内部bash函数来创建所需的数字,以替换rig提供的xxx-xxxx字符串。显示的语法是为了确保我们得到的数字字符串正好是3和4位数字。

该脚本使用rig命令生成身份列表,然后返回该列表,用生成的电话号码替换xxx-xxxx字符串。


    #!/bin/bash

if [ $# == 0 ]; then
    echo -n "number of IDs to generate> "
    read num
else
    num=$1
fi

if [ -f IDs ]; then
    rm IDs
fi

rig -c $num > IDs.$$

while IFS= read -r line
do
  if [[ $line == *"xxx-xxxx" ]]; then
    areacode=`echo $line | cut -c1-5`
    echo -n "$areacode " >> IDs
    echo $((100 + RANDOM % 899))-$((1000 + RANDOM % 8999)) >> IDs
  else
    echo "$line" >> IDs
  fi
done < IDs.$$

# remove temp file
rm IDs.$$

echo "Your generated identities are in the IDs file"

    

在gen_random_IDs脚本的第二个版本中,装备输出被写入IDs.$$文件,修改后的(最终)身份记录被写入IDs文件。脚本启动时存在的任何同名文件都将被删除。当然,欢迎您更改这些行为中的任何一个,以根据您的喜好调整脚本。

最后一个脚本的输出如下所示。请记住,电话号码是完全随机的,不太可能与所示城市的电话号码相似,尽管区号可能没问题。


    $ cat IDs
Silvia Frederick
163 Shalton Dr
Beloit, WI  53511
(608) 776-7085

Mildred Joyner
116 Spring County Blvd
Albany, NY  12212
(518) 491-5250

    

走向国际

rig命令从/usr/share/rig中的文件获取它提供的信息。如果您希望它生成与其他国家相似的名称和地址,则可以替换这些文件的内容。另一方面,您的成功可能取决于地址与当前内容格式的匹配程度。rig命令似乎不能很好地处理城市名称中有一个以上的词,如“旧金山”或“纽约”。它也不太可能很好地处理包含多个组件的区号。

添加数据

rig使用的数据文件中的某些字段有多达1000个条目。我的系统显示:


    $ cd  /usr/share/rig
$ wc -l *
 1000 fnames.idx	<== 1,000 first names for women
 1000 lnames.idx	<== 1,000 last names
   61 locdata.idx	<== 61 cities and states
 1000 mnames.idx	<== 1,000 first names for men
   60 street.idx	<== 1,000 street names
 3121 total

    

这意味着它可以产生多达200万个不同的名字。如果你这么想的话,没有理由不加更多。只需按照格式。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁

评论区

Protected with IP Blacklist CloudIP Blacklist Cloud