2017-07-26 118 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