【发布时间】:2025-12-21 21:25:06
【问题描述】:
希望使用 GAWK 将人类可读的时间戳转换为 CSV 文件中的纪元/Unix 时间,以准备加载到 MySQL 数据库中。
数据示例:
{null};2013-11-26;Text & Device;Location;/file/path/to/;Tuesday, November 26 12:17 PM;1;1385845647
希望在 11 月 26 日星期二下午 12:17 获取第 6 列,并将其转换为纪元时间进行存储。显示的所有时间都将采用 EST 格式。我意识到 AWK 是用于此目的的工具,但似乎不能完全构建命令。目前有:
cat FILE_IN.CSV | awk 'BEGIN {FS=OFS=";"}{$6=strftime("%s")} {print}'
但是这会返回:
{null};2013-11-26;Text & Device;Location;/file/path/to/;1385848848;1;1385845647
大概,这意味着我正在调用当前纪元时间(1385848848 是执行时的当前纪元),而不是要求strftime 转换字符串;但我无法想象另一种方式来做到这一点。
gawk/strftime 将现有时间戳转换为纪元的正确语法是什么?
编辑:这个问题似乎与How do I use output from awk in another command? 关系不大
【问题讨论】:
-
strftime用于格式化已经采用纪元时间戳形式的时间;它不解析其他格式。为此,您可以使用strptime,但 Gawk 不提供。可能是时候接触 Perl 了。 -
不幸的是,卡在了限制我只能使用 BASH 的公司系统中。
-
困惑。如果您可以拨打
gawk,您可以拨打perl... -
我可以调用 perl,但 sysadmin 要求所有脚本只能在 bash 中完成。我意识到这很愚蠢,但没有立场争论。
-
perl -ae 'code goes here'和awk 'code goes here'一样是一个 bash 脚本。