执行AWK生成数据脚本insert.sh出错
来源:10-15 一个复杂的awk处理生产数据的例子-上
天由
2021-02-07
老师,这是您在讲awk最后一节处理复杂数据时给的insert.sh生成数据脚本脚本
#!/bin/bash
function create_random()
{
min=1max=1
max=1max=((2−2-2−min+1))
num=$(date +%s%N)
echo ((((((num%max+max+max+min))
}
INDEX=1
while true
do
for user in allen mike jerry tracy han lilei
do
COUNT=$RANDOM
NUM1=create_random 1 $COUNT
NUM2=expr $COUNT - $NUM1
echo "date '+%Y-%m-%d %H:%M:%S'
$INDEX Batches: user $user insert $COUNT records into database:product table:detail, insert $NUM1 records successfully,failed $NUM2 records" >> ./db.log.date +%Y%m%d
INDEX=expr $INDEX + 1
done
done
我使用sh insert.sh执行后出现报错:
insert.sh: line 7: 1612681977N: value too great for base (error token is “1612681977N”)
expr: syntax error
网上针对这个报错的解决办法是在变量前面加个10#,我尝试了多次但是还没解决,麻烦老师帮忙看下
2回答
-
赵佳子彧
2021-11-09
报这个错误原因是function create_random()函数产生的数据太大,最根本是因为num=$(date +%s%N)这个造成,在shell中可以查看一下data格式,我直接就把%N给去掉就好了或者按自己喜好改一个数据小格式,因为%N是纳秒是数字太大造成后面运算直接出问题 value too great for base
# 我这里简单给几种说明 %N 纳秒(000000000-999999999) %p 当前locale 下的"上午"或者"下午",未知时输出为空 %P 与%p 类似,但是输出小写字母 %r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午) %R 24 小时时间的时和分,等价于 %H:%M %s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 %S 秒(00-60)
10 -
酷田
2021-02-28
您这里贴出来的明显和我给的脚本内容不一致。直接复制我下面的黏贴进insert.sh,然后执行就可以。
#!/bin/bash
#
function create_random()
{
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
}
INDEX=1
while true
do
for user in allen mike jerry tracy han lilei
do
COUNT=$RANDOM
NUM1=`create_random 1 $COUNT`
NUM2=`expr $COUNT - $NUM1`
echo "`date '+%Y-%m-%d %H:%M:%S'` $INDEX Batches: user $user insert $COUNT records into database:product table:detail, insert $NUM1 records successfully,failed $NUM2 records" >> ./db.log.`date +%Y%m%d`
INDEX=`expr $INDEX + 1`
done
done
00
相似问题