目录
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。
其他文档:
本文含有隐藏内容,请 开通VIP 后查看