Bash 使用shell脚本添加月份

Bash 使用shell脚本添加月份,bash,shell,Bash,Shell,目前我在一个文件中有以下记录 ABC,XYZ,123,Sep-2018 在linux中寻找一个命令,它将增加几个月并给出输出。例如,如果我想增加3个月。预期产出为: ABC,XYZ,123,Dec-2018 那么 (小心,该代码会继续经过框的边缘。) 向您展示如何使其工作。只要在循环日期时用shell变量替换echo 基本上,您可以使用awk获取日期部分,在前面添加一个1-将其转换为实际日期,然后使用date命令进行计算,然后告诉它只给出月份缩写和年份 上面的一行只给出了日期部分。第一部分可

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

ABC,XYZ,123,Sep-2018
在linux中寻找一个命令,它将增加几个月并给出输出。例如,如果我想增加3个月。预期产出为:

ABC,XYZ,123,Dec-2018
那么

(小心,该代码会继续经过框的边缘。)

向您展示如何使其工作。只要在循环日期时用shell变量替换
echo

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

上面的一行只给出了日期部分。第一部分可通过以下方式找到:

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

(小心,该代码会继续经过框的边缘。)

向您展示如何使其工作。只要在循环日期时用shell变量替换
echo

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

上面的一行只给出了日期部分。第一部分可通过以下方式找到:

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

您可以使用外部
date
或(g)awk的datetime相关函数来执行此操作。但是,您必须准备要解析的字符串。下面是另一种方法:

首先准备一个索引文件,我们将其命名为
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

您可以使用外部
date
或(g)awk的datetime相关函数来执行此操作。但是,您必须准备要解析的字符串。下面是另一种方法:

首先准备一个索引文件,我们将其命名为
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

到目前为止您尝试了什么?您的文件只有一条记录?将有多条记录。@程序员,您应该指定检测此类记录的规则。如果2018年2月出现另一个aaa记录,bbbb会怎样?用户应该知道搜索记录的清晰格式具有多条记录的格式是清晰的。所有记录将采用相同的格式。逗号分隔的第四列是我要转换的列。到目前为止您尝试了什么?您的文件只有一条记录?将有多条记录。@程序员,您应该指定检测此类记录的规则。如果2018年2月出现另一个aaa记录,bbbb会怎样?用户应该知道搜索记录的清晰格式具有多条记录的格式是清晰的。所有记录将采用相同的格式。逗号分隔的第四列是我要转换的。@Programmer-我添加了一行,显示如何获取存根。@TonyWills我使用了上述命令,它帮助我获得了所需的结果。同样感谢:)@Programmer-我添加了一行,显示如何获取存根。@TonyWillams我使用了上述命令,它帮助我获得了所需的结果。同样感谢:)