使用awk格式化文件中的日期

时间:2014-11-13 22:13:00

标签: bash date awk

文件内容为

Feb-01-2014     one     two
Mar-02-2001     three   four

我想将第一个字段(日期)格式化为%Y%m%d格式 我试图使用awk和date命令的组合,但不管怎样,这种情况都失败了,即使我感觉到我几乎在那里:

cat infile | awk -F"\t" '{$1=system("date -d " $1 " +%Y%m%d");print $1"\t"$2"\t"$3}' > test

这打印出日期的使用页面,这让我觉得日期命令被正确触发,但是参数有问题,你在某个地方看到了这个问题吗? 我对awk并不熟悉,

4 个答案:

答案 0 :(得分:2)

您不需要date,只需重新排列日期字符串:

$ awk 'BEGIN{FS=OFS="\t"} {
    split($1,t,/-/)
    $1 = sprintf("%s%02d%s", t[3], (match("JanFebMarAprMayJunJulAugSepOctNovDec",t[1])+2)/3, t[2])
}1' file
20140201        one     two
20010302        three   four

答案 1 :(得分:0)

您可以使用:

while read -r a _; do
   date -d "$a" '+%Y%m%d'
done < file
20140201
20010302

答案 2 :(得分:0)

system()返回命令的退出代码。

相反:

cat infile | awk -F"\t" '{"date -d " $1 " +%Y%m%d" | getline d;print d"\t"$2"\t"$3}'

答案 3 :(得分:0)

$ awk '{var=system("date -d "$1" +%Y%m%d | tr -d \"\\n\"");printf "%s\t%s\t%s\n", var, $2, $3}' file
201402010       one     two
200103020       three   four