【发布时间】:2014-05-08 14:20:12
【问题描述】:
我正在尝试在 CSV 文件中格式化一些日期数据。
~/temperature$ cat m
1 01/04/13 02:20:07 PM 21.843 24.360 981.5
2 01/04/13 02:25:07 PM 21.509 27.048 335.1
3 01/04/13 02:30:07 PM 19.555 31.441 335.1
4 01/04/13 02:35:07 PM 18.628 32.154 335.1
5 01/04/13 02:40:07 PM 18.152 31.782 327.2
6 01/04/13 02:45:07 PM 17.962 34.723 327.2
7 01/04/13 02:50:07 PM 17.867 33.008 335.1
8 01/04/13 02:55:07 PM 17.819 35.722 327.2
9 01/04/13 03:00:07 PM 17.819 33.989 327.2
10 01/04/13 03:05:07 PM 17.796 36.143 327.2
我想将日期转换为“YYYY-MM-DD HH:MM:SS”格式。
这是我尝试过的:
~/temperature$ awk '{("date \"+%Y-%m-%d %T\" --date \"$2 $3\"")|getline t; print t}' m
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
2014-03-28 00:00:00
~/temperature$ awk '{("date \"+%Y-%m-%d %T\" -d "$2 )|getline t; print t}' m
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
2013-01-04 00:00:00
~/temperature$ awk '{("date \"+%Y-%m-%d %T\" -d "$2" "$3)|getline t; print t}' m
date: extra operand `02:20:07'
Try `date --help' for more information.
date: extra operand `02:25:07'
Try `date --help' for more information.
...
...
所以这两种方法都给出了错误的日期。关于如何解决它的任何想法? 非常感谢。
DY.
【问题讨论】:
-
您的第一个 awk 命令将 date 传递给
"$2 $3"的日期(shell 将其视为 shell 变量并替换为空值)。我想你的意思是--date \""$2" "$3"\""。 -
使用
shell调用awk调用shell调用date可能不是一个好方法。在这种情况下,实际上并不清楚调用date会提供什么值。此外,如果您正在考虑在 awk 中使用getline,请务必先阅读 awk.info/?tip/getline 并完全理解所有注意事项。 -
用 awk.freeshell.org/AllAboutGetline 代替 awk.info