Linux 在一年内为循环嵌套数月
我目前正在编写一个shell脚本,它将查询一些配置单元表,以获取表列表中每个月的记录计数,然后将总计数值提取为.txt文件。我现在有一个每年查询所有表的代码,但是我怎样才能最好地让它每年每月循环一次呢 例如,现在我的脚本将在我通过year=2001,20022003,。。。查询我的表并提取文件。我想让它每年每月循环一次,这样理想情况下每年会有12个文件,并在我指定的任何年份继续循环 下面是我目前拥有的伪代码示例:Linux 在一年内为循环嵌套数月,linux,bash,shell,for-loop,Linux,Bash,Shell,For Loop,我目前正在编写一个shell脚本,它将查询一些配置单元表,以获取表列表中每个月的记录计数,然后将总计数值提取为.txt文件。我现在有一个每年查询所有表的代码,但是我怎样才能最好地让它每年每月循环一次呢 例如,现在我的脚本将在我通过year=2001,20022003,。。。查询我的表并提取文件。我想让它每年每月循环一次,这样理想情况下每年会有12个文件,并在我指定的任何年份继续循环 下面是我目前拥有的伪代码示例: #!/usr/bin/sh years=2001,2002,2003,20
#!/usr/bin/sh
years=2001,2002,2003,2004
for year in $(echo ${years} | sed "s/,/ /g")
do
select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where year(date)=$year"
beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"
done
在本例中,嵌套循环和数组可能类似于:
years=2001,2002,2003,2004
months=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
for year in $(echo ${years} | sed "s/,/ /g")
do
for month in "${months[@]}"
do
# do the query and file saving here
echo "$year $month"
done
done
这个问题有一个bash标记,但解释器是/usr/bin/sh
无论如何,让我们使用bash
网络上的嵌套循环,因此不知道您可能会被困在哪里。你能展示一下你到目前为止所做的尝试吗?当然,只要用一些示例代码编辑帖子,你就可以在do..done块中插入另一个for循环,并以数字或字符串的形式迭代几个月。谢谢@sal最终修改了嵌套循环,但遵循了相同的解决方案。
#!/bin/bash
for clause in "year(date)="{2001,2002,2003,2004}" and month(data)='"{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}"'"
do
select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where $clause"
echo "$select_sql"
#beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"
done