免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2301 | 回复: 10
打印 上一主题 下一主题

[系统管理] 循环的问题 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-27 17:41 |只看该作者 |倒序浏览
请问大家如下的两个循环是不是一样的效果?但是处理的结果是不一样的

#!/bin/sh
for ((i=1;i<=2000000;i++)); do
echo 'INSERT INTO hxl.tb_dic_class_myisam(class_id, class_name) values('$i,\'$i'班'\'\)\;>>insert_sql.sql
done;
这个产生的i值没有重复。


#!/bin/sh
for i in $(seq 2000000); do
echo 'INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values('$i,\'$i'班'\'\)\;>>insert_sql.sql
done;
这个i值到了1000000以后就出现了重复的情况

请问大家是什么原因呢?

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
2 [报告]
发表于 2014-08-27 19:13 |只看该作者
  1. cat b
  2. for ((i=1990000;i<=2000000;i++)); do
  3. echo 'INSERT INTO hxl.tb_dic_class_myisam(class_id, class_name) values('\'''${i}''\'','\'''${i}'ban'\'');'
  4. done
复制代码
如果你看这样没问题的话,改改i的初始值和重定向就ok了

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-08-28 08:38 |只看该作者
seq 应该没有问题的. 刚刚试过了.

楼主能否考虑修改一下 i 这个字符看看. 比如换成 x 或者 n 这样.

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
4 [报告]
发表于 2014-08-28 09:29 |只看该作者
本帖最后由 hxl 于 2014-08-28 09:35 编辑

回复 3# q1208c


  
i换成x也不行,到了100000行,就用科学表示发表示了,从下面看出现了重复。
又试了下,将x赋予初始值x=1,得到的结果也是出现重复的。

[mysql@node2 shell]$ awk 'NR>999999 && NR<1000015' insert_sql_seq.sql
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1e+06,'1e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');
INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1.00001e+06,'1.00001e+06班');

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
5 [报告]
发表于 2014-08-28 09:38 |只看该作者
回复 4# hxl

你用的是什么shell ?


   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2014-08-28 09:41 |只看该作者
不大清除,$(seq 2000000)的结果放在哪里?能放下吗?
这可是一个2百万个元素的集合啊...

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
7 [报告]
发表于 2014-08-28 09:42 |只看该作者
回复 4# hxl
在我机器上是好的.
  1. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999993,'1999993班');
  2. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999994,'1999994班');
  3. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999995,'1999995班');
  4. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999996,'1999996班');
  5. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999997,'1999997班');
  6. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999998,'1999998班');
  7. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(1999999,'1999999班');
  8. INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values(2000000,'2000000班');
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
8 [报告]
发表于 2014-08-28 10:27 |只看该作者
跟你表数据类型定义有关吧?
mysql> desc tablename

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
9 [报告]
发表于 2014-08-28 10:36 |只看该作者
本帖最后由 关阴月飞 于 2014-08-28 10:40 编辑

回复 1# hxl

这个应该是seq的版本较低,需要指定一下输出格式:
  1. seq -f %1.f  2000000
复制代码
以下是info seq 中的说明:
  1.        If you want to use `seq' to print sequences of large integer values,
  2. don't use the default `%g' format since it can result in loss of
  3. precision:

  4.      $ seq 1000000 1000001
  5.      1e+06
  6.      1e+06

  7.    Instead, you can use the format, `%1.f', to print large decimal
  8. numbers with no exponent and no decimal point.

  9.      $ seq --format=%1.f 1000000 1000001
  10.      1000000
  11.      1000001
复制代码
另外sql语句方面,这样写会好看很多:

echo "INSERT INTO hxl.tb_dic_class_mem(class_id, class_name) values('$i','$i班');">>insert_sql.sql





论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
10 [报告]
发表于 2014-08-28 12:59 |只看该作者
你的环境问题,粘贴你的两个脚本,都能正常执行,没有重复
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP