awk命令更改日期格式

时间:2017-07-26 10:48:15

标签: shell

我有一个包含以下记录的文件:

**cat Date.txt**
SEPT,30-SEP-2017
MARCH,30-MAR-2018
JULY,30-JUL-2017
DECEM,30-DEC-2017
AUGS,30-AUG-2017

我希望输出为:

    SEPT,20170930
    MARCH,20180330
    JULY,20170730
    DECEM,20171230
    AUGS,20170830

我已经使用while循环完成了一个脚本,如下所示。

    cat Date.txt > /tmp/exp.part
    while read line
    do
    Dat=$(echo $line | awk -F , '{print $1}')
    DatNew=$(date -d $Exp +%Y%m%d)
    echo $DatNew
    done < /tmp/exp.part

我想知道我是否可以从awk命令执行此操作,而不是编写while循环。

1 个答案:

答案 0 :(得分:1)

在awk中使用系统命令的一种方法: 输入文件:

$ cat file
27-SEP-2017
28-MAR-2018
27-JUL-2017
27-DEC-2017
29-AUG-2017


$ awk '{system("date -d " $0 " +%Y%m%d")}' file
20170927
20180328
20170727
20171227
20170829

对于更新的输入文件:

$ cat file
SEP,27-SEP-2017
MAR,28-MAR-2018
JUL,27-JUL-2017
DEC,27-DEC-2017
AUG,29-AUG-2017


$ awk -F, '{system("date -d " $2 " +%Y%m%d")}' file
20170927
20180328
20170727
20171227
20170829

更新要求:

$ cat file
SEPT,30-SEP-2017
MARCH,30-MAR-2018
JULY,30-JUL-2017
DECEM,30-DEC-2017
AUGS,30-AUG-2017

$ awk -F, '{cmd="date -d "q $2 q" "s"+%Y%m%d"s; cmd|getline x;print $1,x}'  dq='"' sq="'"  OFS=, file
SEPT,20170930
MARCH,20180330
JULY,20170730
DECEM,20171230
AUGS,20170830