在UNIX BASH中计算上一季度末月份和年度
我对Unix非常陌生,需要在Unix Bash中计算上一季度末月份和年度的帮助 例如:- 如果今天的日期为2021-05-11,则输出需要为032021(2021年3月) 如果今天的日期是2021-01-31,则输出需要是122020(2020年12月) 我确实尝试了案例陈述,并按预期工作在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
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分钟写。