2017-07-26 70 views
0

我有一个包含以下记录的文件:awk命令来更改日期格式

**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循环。用awk内系统命令

回答

1

方式一: 输入文件:

$ 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 
+0

我得到一个错误日期:无效日期'+%Y%m%d' – Programmer

+0

你能打印你确切的输入文件内容吗? – Guru

+0

$猫文件 SEP,27-SEP-2017 MAR 28-MAR-2018 JUL,27-JUL-2017 DEC,27-DEC-2017 AUG,8月29日 - 2017年 $ awk'{system(“date -d”$ 0“+%Y%m%d”)}'file date:invalid date'SEP,27-SEP-2017' date:invalid date'MAR,28-MAR- 2018' date:invalid date'JUL,27-JUL-2017' date:invalid date'DEC,27-DEC-2017' date:invalid date'AUG,29-AUG-2017' – Programmer