Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在一年内为循环嵌套数月_Linux_Bash_Shell_For Loop - Fatal编程技术网

Linux 在一年内为循环嵌套数月

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

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

例如,现在我的脚本将在我通过year=2001,20022003,。。。查询我的表并提取文件。我想让它每年每月循环一次,这样理想情况下每年会有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

在本例中,嵌套循环和数组可能类似于:

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