Linux生成大数据文件

发布于:2022-12-13 ⋅ 阅读:(269) ⋅ 点赞:(0)

目录

1. awk 命令

1.1. 指定行数

1.2. 指定大小

1.3. 生成随机数/字符串

1.4. awk与shell对比速度

2. yes 命令

2.1. 指定行数

2.2. 指定大小

3. awk与yes对比速度


1. awk 命令

1.1. 指定行数

生成10行字符串
awk -v 'var=a,b,c' 'BEGIN{for (i=1; i<=10; i++) print i","var}'
    var:将需要指定生成的字符串提前准备好
    i<=10:表示生成10行

1.2. 指定大小

生成10M字符串
awk -v 'var=a,b,c' 'BEGIN{i=1; while (i > 0) {print i","var; i++}}' |head -c 1M
    var:提前准备需要的字符串
    i>0:无限循环
    head -c:指定输出大小

大小虽然指定成功了,但是最后一行字符串有缺失。这是因为head只管指定大小,不管最后一行是否准确,所以可以使用 sed 不打印最后一行 

awk -v 'var=a,b,c' 'BEGIN{i=1; while (i > 0) {print i","var; i++}}' |head -c 1M |sed -n '$!p'

1.3. 生成随机数/字符串

生成随机数:指定分隔符为逗号,输出5行2列随机数(数值为0-100)
awk -v 'OFS=,' 'BEGIN{srand(); i=1; while (i>0) {print int(rand() * 100), int(rand() * 100)} }' |head -5

生成随机字符串:10行,每行最大为5个字符
awk -v 'row=10' -v 'let=5' -v 'str=qwertyuiopasdfghjklzxcvbnm' 'BEGIN{srand(); for (i=1; i<=row; i++) {rand_num = int(rand()*25+1); print substr(str, rand_num, let)} }'

 

1.4. awk与shell对比速度

awk 打印 100w 行指定字符串
time awk -v 'var=a,b,c' 'BEGIN{for (i=1; i<=1000000; i++) print i","var}' >/dev/null

shell 打印 100w 行指定字符串
s="a,b,c"; time for ((i=1; i<=1000000; i++));do echo "$i,$s" ;done >/dev/null

  • awk耗时:0.37秒
  • shell耗时 :7.77秒 

awk 的速度是 shell 的21倍

2. yes 命令

2.1. 指定行数

生成1000行字符串
yes "a,b,c" |head -1000
    "a,b,c":指定需要生成的字符串
    head -1000:指定1000行

2.2. 指定大小

生成1M字符串
yes "a,b,c" |head -c 1M
    "a,b,c":指定需要生成的字符串
    head -c:指定大小

 大小虽然指定成功了,但是最后一行字符串有缺失。这是因为head只管指定大小,不管最后一行是否准确,所以可以使用 sed 不打印最后一行。

生成1M字符串,去除最后一行
yes "a,b,c" |head -c 1M |sed -n '$!p'

3. awk与yes对比速度

awk 生成 1000w 行
time awk -v 'var=a,b,c' 'BEGIN{for (i=1; i<=10000000; i++) print var}' > file1

yes 生成 1000w 行
time yes "a,b,c" |head -10000000 >file2

  • awk耗时:1.464秒
  • yes耗时: 0.356秒

可以看出 yes 比 awk 快 4.1 倍。

但 yes 的缺点也很明显,只能输出相同的字符串,具有一定的局限性,awk 可以输出循环数,且自带函数能生成随机数,具有强大的可扩展性。

例如:

数据库需要唯一数据,那么首选 awk。如果没有特殊要求,那么首选 yes。

其他文档:

Linux命令_awk常用指南

快速生成随机数、随机字符串、随机验证码

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到