您的位置:首页 > 运维架构 > Shell

经典-输出规律的数字序列

2016-05-24 11:16 375 查看

第1章 问题:

群友问了个问题:我shell,我怎么才只打出100,110,120.....190 201,211,......291 ,302,312,322....392 这种格式的数据

第2章 问题分析

2.1 需求:

我这个会用在数据库,前面10个库,我如果是第一个库,我就会建表00 10 20 。。。90 。第二个库就用01 ,11 ,,,91

2.2 分析

一个循环加一个if就可以,干嘛双循环呢因为不管怎么变,步进都是10,所以根本没必要1个1个循环,10个10个就行这时候就得考虑每到100的时候+1所以就这么个思路此处感谢潜艇大叔,提供思路。

2.3 想要的结果

110
120
130
140
150
160
170
180
190
211
221
231
241
251
261
271
281
291
312
322
332
342
352
362
372
382
392
413
423
433
443
453
463
473
483
493
514
524
534
544
554
564
574
584
594
615
625
635
645
655
665
675
685
695
716
726
736
746
756
766
776
786
796
817
827
837
847
857
867
877
887
897
918
928
938
948
958
968
978
988
998
1019
1029
1039
1049
1059
1069
1079
1089
1099

第3章 解答方法

注:(为了节约空间只显示到500

3.1 方法一-awk01-循环+判断

[root@show scripts]# awk 'BEGIN{for(i=100;i<=500;i+=10){j++;print i;if(j%10==0)i++}}'
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493
思路很简单,通过j变量控制循环,每10次 使得i的值+1(既i++)目的是达到 201 302 403 这种效果。

3.2 方法二-awk02-循环+三目运算符

[root@show scripts]# awk 'BEGIN{for(i=100;i<=500;i+=10){j++;print(j%10==0?i++:i)}}'
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493
三目运算符:相当于if xxx ;then xxxx; xxx fi 条件判断。也是很好的方法。
3.3 方法三-shell01-循环+判断
#!/bin/bash
for((i=100;i<=$1;i+=10))
do
let j++
echo $i
if [ $((j%10)) -eq 0 ];then
let  i++
fi

done
[root@show scripts]# sh  seq.sh  500
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493
awk可以做,其实shell也可以实现的。
思路一致的。3.4方法四-shell02-循环+三目运算符
#!/bin/bash
for((i=100;i<=500;i+=10))
do
let j++
echo $((j%10==0?i++:i))
done
[root@show scripts]# sh seq.sh  500
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493
shell也不甘示弱,我也有三目运算符啊。

3.5 方法五-shell02-不推荐-没效率

#!/bin/bash
for((i=1;i<=5;i++))
do
for((j=10;j<=90;j+=10))
do
middle=`printf %02d"$j"`
num=$i$((middle+i-1))
echo $num
done
done

[root@show scripts]# sh  seq2.sh
110
120
130
140
150
160
170
180
190
211
221
231
241
251
261
271
281
291
312
322
332
342
352
362
372
382
392
413
423
433
443
453
463
473
483
493
514
524
534
544
554
564
574
584
594
最简单的思路,可是双层嵌套循环,没有效率。

第4章 总结
最核心的是算法,到底如何做。
一个循环,每十次自动加1.

难免有不足之处请大家指正谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell awk 文本处理