目前我在文件中有以下记录。
ABC,XYZ,123,Sep-2018
在linux中寻找一个命令,它将添加几个月并给出输出。例如,如果我想添加3个月。预期产出是:
ABC,XYZ,123,Dec-2018
答案 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