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

第1章 问题:

群友问了个问题:我shell,我怎么才只打出100110120.....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,文本处理)