执行AWK生成数据脚本insert.sh出错

来源:10-15 一个复杂的awk处理生产数据的例子-上

天由

2021-02-07

老师,这是您在讲awk最后一节处理复杂数据时给的insert.sh生成数据脚本脚本
#!/bin/bash
function create_random()
{
min=1max=1 max=1max=((2−2-2min+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)


1
0

酷田

2021-02-28

//img.mukewang.com/szimg/603afd8f0914754806670263.jpg

您这里贴出来的明显和我给的脚本内容不一致。直接复制我下面的黏贴进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





0
0

掌握Shell脚本编程 360架构师带你进阶Linux高手

30%知识讲解+70%实例操作 掌握Shell脚本编程能力

1638 学习 · 297 问题

查看课程