首页 > 解决方案 > 一年内嵌套几个月的for循环

问题描述

我目前正在编写一个 shell 脚本,它将查询一些配置单元表的每月记录计数以获取表列表,然后将总计数值提取为 .txt 文件。我目前有代码可以每年查询所有表,但是我怎样才能最好地让它每年每月循环一次呢?

例如,现在我的脚本将循环遍历我经过的每一年(year=2001, 2002,2003,...)并查询我的表并提取文件。我希望它每年每月循环一次,以便理想情况下每年有 12 个文件,并在我分配的任何年份继续循环。

下面是我目前拥有的示例伪代码:

#!/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

标签: linuxbashshellfor-loop

解决方案


这个问题有一个bash标签,但解释器是/usr/bin/sh.

无论如何,让我们使用bash.

#!/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

推荐阅读