文件内容为
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并不熟悉,
答案 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