简体   繁体   中英

format date in file using awk

Content of the file is

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

I'd like to format the first field (the date) to %Y%m%d format
I'm trying to use a combination of awk and date command, but somehow this is failing even though i got the feeling i'm almost there:

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

this prints out date's usage pages which makes me think that the date command is triggered properly, but there is something wrong with the argument, do you see the issue somewhere? i'm not that familiar with awk,

You don't need date for this, its simply rearranging the date string:

$ 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

You can use:

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

system() returns the exit code of the command.

Instead:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM