我有数百万行数据,我的老板要求我为它们重新格式化。
格式为:
06/28/2022,04:00,142.01,142.38,141.59,142.15,3151
06/28/2022,04:01,142.1,142.1,142.1,142.1,196
我需要将第一个日期字段重新格式化为:
20220628,04:00,142.01,142.38,141.59,142.15,3151
20220628,04:01,142.1,142.1,142.1,142.1,196
%Y%m%d
我有以下内容:
gawk -F"," '{OFS=","; $1=strftime("%Y%m%d", $1); print $0}' AAPL.txt > AAPL.csv
但奇怪的是它有效,但产生的日期是 1969 年。
19691231,04:00,142.01,142.38,141.59,142.15,3151
19691231,04:01,142.1,142.1,142.1,142.1,196
我不明白为什么。我选择gawk
是因为awk
在 MacOS 上没有,strftime
并且在外部调用会date
产生巨大的性能影响。
您的代码没有按照您的期望执行,因为 GNU
awk
strftime()
期望将 Unix 时间戳作为其第二个参数。它无法解析任意日期时间字符串。但是,我们在这里并不需要
strftime()
。这将每一行输入视为简单的逗号分隔字段,并将第一个这样的字段拆分
/
为数组a
。然后将第一个字段重新形成为以所需顺序连接的数组元素。1
代码末尾的单独awk
导致输出修改的记录。这适用
awk
于 macOS 上的默认设置。它不需要特殊的日期格式化函数,因为它将输入日期视为字符串并简单地对其进行重组。关于日期的唯一假设是它始终采用DD/MM/YYYY
输入格式,并且应该采用YYYYMMDD
输出格式。您不需要像
strftime
进行日期处理这样的功能,因为您需要做的就是交换字段。sed
在这里很好用: