使用shell脚本添加月份

时间:2018-04-27 07:21:21

标签: bash shell

目前我在文件中有以下记录。

ABC,XYZ,123,Sep-2018

在linux中寻找一个命令,它将添加几个月并给出输出。例如,如果我想添加3个月。预期产出是:

ABC,XYZ,123,Dec-2018

2 个答案:

答案 0 :(得分:2)

那么,

date -d "1-$(echo "ABC,XYZ,123,Sep-2018" | awk -F ","  '{ print $4 }')+3 months" "+%b-%Y"

(小心,该代码继续超越盒子的边缘。)

向您展示如何使其正常工作。在遍历日期时,只需用shell变量替换echo

基本上,您使用awk来获取日期部分,在前面添加1-以将其转换为实际日期,然后使用date命令进行数学运算然后告诉它只给你一个月缩写和年份。

上面的行只给出了日期部分。第一部分可以使用:

找到
stub=`echo "ABC,XYZ,123,Dec-2018" | awk -F ","  '{ printf("%s,%s,%s,",$1,$2,$3) }'`

答案 1 :(得分:1)

您可以使用外部date或(g)awk的日期时间相关功能来执行此操作。但是,您必须准备要解析的字符串。这是另一种完成工作的方法:

首先准备一个索引文件,我们将其命名为month.txt

Jan
Feb
......
...
Nov
Dec

然后运行:

awk -F'-|,' -v OFS="," 'NR==FNR{m[NR]=$1;a[$1]=NR;next}
    {i=a[$4]; if(i==12){i=1;++$5}else i++
    $4=m[i]"-"$5;NF--}7' month.txt file

使用此示例文件:

ABC,XYZ,123,Jan-2018
ABC,XYZ,123,Nov-2018
ABC,XYZ,123,Dec-2018

你会得到:

ABC,XYZ,123,Feb-2018
ABC,XYZ,123,Dec-2018
ABC,XYZ,123,Jan-2019

更新

哦,我没注意到你想加3个月。以下是更新后的代码:

 awk -F'-|,' -v OFS="," 'NR==FNR{m[NR]=$1;a[$1]=NR;next}
    {i=a[$4]+3; if(i>12){i=i-12;++$5}
    $4=m[i]"-"$5;NF--}7' month.txt file

现在使用相同的输入,你得到:

ABC,XYZ,123,Apr-2018
ABC,XYZ,123,Feb-2019
ABC,XYZ,123,Mar-2019