Cjxcz Odjcayrwl
Cjxcz Odjcayrwl

Reputation: 22847

Linux shell - parse date in odd formats

Is there any way to use standard tools (not programming scripts) to parse the date in custom, odd format?

I've got a start script (bash) that should handle the output of the program, that contains dates with very odd formatting (like Jan, 4, 2021, 1:20:30 PM - which would be a pattern like "MMM, d, yyyy, h:mm:ss a".

It would be possible to extract the tokens with sed or awk, but processing them is a nightmare, especially month shortcuts (they are in the same language like system, but that language can be installation-specific) or hours (need to check AM/PM token and add 12 if it's PM).

'date' apparently doesn't support that, but maybe some shell extension or toolkit package? Or I'm out of luck and I need to parse this crappy format token by token with sed/cut/awk?

This what I've tried was to do touch -d "Date" after removing the commas (so that I can compare dates with [[ file1 -ot file2 ]], but the problem is, that touch has ignored the TIME part, and ls -lh has shown, that the year was set in place of time, and the result of the comparison was therefore invalid.

Upvotes: 2

Views: 161

Answers (1)

Cyrus
Cyrus

Reputation: 88636

Convert date with GNU date and bash:

d="Jan, 4, 2021, 1:20:30 PM"

IFS=',:' read mon day year hour min sec a <<<"$d"
date -d "$mon $day $year $hour:$min:$sec $a" '+%Y-%m-%d %H:%M:%S'

Output:

2021-01-04 13:20:30

Upvotes: 3

Related Questions