Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
在UNIX BASH中计算上一季度末月份和年度_Bash_Unix - Fatal编程技术网

在UNIX BASH中计算上一季度末月份和年度

在UNIX BASH中计算上一季度末月份和年度,bash,unix,Bash,Unix,我对Unix非常陌生,需要在Unix Bash中计算上一季度末月份和年度的帮助 例如:- 如果今天的日期为2021-05-11,则输出需要为032021(2021年3月) 如果今天的日期是2021-01-31,则输出需要是122020(2020年12月) 我确实尝试了案例陈述,并按预期工作 m=$(date +%m) y=$(date +%Y) if [ $m -ge 1 -a $m -le 3 ]; then prev_qtr_mon=12 prev_qtr_yr=`ex

我对Unix非常陌生,需要在Unix Bash中计算上一季度末月份和年度的帮助

例如:- 如果今天的日期为2021-05-11,则输出需要为032021(2021年3月) 如果今天的日期是2021-01-31,则输出需要是122020(2020年12月)

我确实尝试了案例陈述,并按预期工作

m=$(date +%m)
y=$(date +%Y)

if [ $m -ge 1 -a $m -le 3 ]; then
     prev_qtr_mon=12
     prev_qtr_yr=`expr $y - 1`
elif [ $m -ge 4 -a $m -le 6 ]; then
     prev_qtr_mon=03
     prev_qtr_yr=$y
elif [ $m -ge 7 -a $m -le 9 ]; then
     prev_qtr_mon=06
     prev_qtr_yr=$y
elif [ $m -ge 10 -a $m -le 12 ]; then
     prev_qtr_mon=09
     prev_qtr_yr=$y
fi
echo ${prev_qtr_mon}
echo ${prev_qtr_yr}
acct_dt=${prev_qtr_mon}${prev_qtr_yr}
echo ${acct_dt}

是否有一种有效的方法来实现这一点,而不是大案要案?你能帮忙吗?

我认为这更多的是一个关于数学的问题,而不是关于编程的问题。如果您的月份存储在
m
上,如示例代码中所示,则语句

((quartnum=M/4))
quartnum
上为您提供一个从0到3的数字,其中0是第一个季度,3是最后一个季度。这是m实际所在的季度

上一个季度会少一个季度或多三个季度(取决于您希望看到它的方式),您必须调整以在年度边界处进行换行。我会用+3而不是-1来避免负数的模计算:

((prevquartnum=(quartnum+3)%4))
要将季度映射到一个月,您可以使用一个不太优雅但简单的表格:

quartmonth=(3 6 9 12) 
这表明第一季度(即prevquartnum 0)与三月相关,第二季度与六月相关,依此类推。现在通过
${quartmonth[$prevquartnum]}


我会用一个简单的
if
来处理年份:如果
m
等于或小于3,你必须从年份中减去1。否则这就是今年。

我认为这更多的是关于数学的问题,而不是关于编程的问题。如果您的月份存储在
m
上,如示例代码中所示,则语句

((quartnum=M/4))
quartnum
上为您提供一个从0到3的数字,其中0是第一个季度,3是最后一个季度。这是m实际所在的季度

上一个季度会少一个季度或多三个季度(取决于您希望看到它的方式),您必须调整以在年度边界处进行换行。我会用+3而不是-1来避免负数的模计算:

((prevquartnum=(quartnum+3)%4))
要将季度映射到一个月,您可以使用一个不太优雅但简单的表格:

quartmonth=(3 6 9 12) 
这表明第一季度(即prevquartnum 0)与三月相关,第二季度与六月相关,依此类推。现在通过
${quartmonth[$prevquartnum]}


我会用一个简单的
if
来处理年份:如果
m
等于或小于3,你必须从年份中减去1。否则它就是当前年份。

我会用算术表达式重写它,比如
((m>=1&&m我会用算术表达式重写它,比如
((m>=1&&m)只是想知道:你为什么要在bash中这样做?只是想知道:你为什么要在bash中这样做?prev_qtr_mon=$(printf“%02d”“$((m+2)/3*3)))给我当前季度的结尾。我在寻找上一季度。例如:-如果当前日期是5月、6月、7月,需要03,如果月份是1月、2月、3月,那么上一年就需要12个月。你能建议一下吗?例如,代码很复杂,很难理解,很难编写,可能会引起错误。只需使用
elif
树,它清晰易读,不需要修改上一个qtr\u mon=$(printf“%02d”“$((m+2)/3*3)))给我当前季度的结尾。我在寻找上一季度。例如:-如果当前日期是5月、6月、7月,需要03,如果月份是1月、2月、3月,那么上一年就需要12个月。你能建议一下吗?例如,代码很复杂,很难理解,很难编写,可能会引起错误。只需使用
elif
树,它清晰易读,不需要修改rks,你花了1分钟写。