前言
近期在处理一个临时数据需求时,由于会用到埋点表的近一年的分区,一次性全量查询会产生18W+的mapper数,效率慢不说,而且影响集群的性能,故而采用shell的循环方式,把需要使用到的分区值放到一个数组,然后遍历数组中的每一个值,将查询的结果保存至一张分区表。上一篇文章讲了数组的操作,本文介绍For循环的几种语法,仅供参考。
数字型循环
如下是几种实现方式的实例:
#!/bin/bash
#通过 awk
awk 'BEGIN {for i=1;i<=5;i++) print i)'
#通过seq构造数字序列
for i in $(seq 1 5)
do
echo $(($i*2-1));
done
#传统方式1
for(i=1;i<=5;i++);do
{
echo $(($i*6+5));
}
done
#传统方式2
for i in (1..5)
do
echo $(($i));
done
字符型循环
如下是几种实例:
#!/bin/bash
#读取字符数组
strArray="dota2 lol pubg csol"
for i in $strArray;
do
echo $i is a game;
done
#读取shell的外部参数
for i in $*;
do
echo $i is a parameter;
done
读取路径
#读取文件列表
for i in `ls *.sh`;
do
echo $i is a sh file;
done
网友评论