简体   繁体   English

如何格式化CSV文件中的时间戳列?

[英]How can I format the timestamp column in a CSV file?

I'm triyng to format the first column of a CSV which is a unix timestamp in milliseconds to a format like this command: 我正在尝试将CS​​V格式的第一列(以毫秒为单位)格式化为以下命令的格式:

date -d @$( echo "($line_date + 500) / 1000" | bc)

where $line_date is something like 1487693882310 其中$ line_date类似于1487693882310

And my file has this information: 我的文件包含以下信息:

1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
1487613634268,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
1487614351573,,,,,,spadmin,logout,,,,,,,, ,,,,
1487614500536,,,,,,System,run,Perform Maintenance,,,,,,, ,,,,

I would like it to be like this: 我希望这样:

mié feb 15 11:00:59 CET 2017,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
lun feb 20 19:00:34 CET 2017,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
lun feb 20 19:12:32 CET 2017,,,,,,spadmin,logout,,,,,,,, ,,,,
lun feb 20 19:15:01 CET 2017,,,,,,System,run,Perform Maintenance,,,,,,, ,,,,

I've tried this but it didn't work: 我已经尝试过了,但是没有用:

awk 'BEGIN{FS=OFS=","}{$1=`date -d @$( echo "($date_now + 500) / 1000" | bc)\`}1' file.csv

Any help will be much apreciated. 任何帮助将不胜感激。

Thank you very much in advanced. 非常感谢您。

Kind regards. 亲切的问候。

Héctor 赫克托

One way is to leave the CSV line intact and prepend it with the parsed timestamp as the first column. 一种方法是保持CSV行完整无缺,并在其前面加上已解析的时间戳作为第一列。

Something like: 就像是:

gawk -F, '{ printf "%s.%03u,",strftime("%Y-%m-%dT%H:%M:%S", $1/1000),$1%1000; print }' file.csv

Outputs: 输出:

2017-02-15T10:00:59.086,1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
2017-02-20T18:00:34.268,1487613634268,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
2017-02-20T18:12:31.573,1487614351573,,,,,,spadmin,logout,,,,,,,, ,,,,
2017-02-20T18:15:00.536,1487614500536,,,,,,System,run,Perform Maintenance,,,,,,, ,,,,

Or you can rebuild the first field and then print the whole record like this: 或者,您可以重建第一个字段,然后打印整个记录,如下所示:

echo 1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,, | awk  'BEGIN{OFS=FS=","}{$1=strftime("%a %b %d %H:%M:%S %Z %Y", $1)}1'

You'll get this: 您会得到:

Fri Dec 13 14:45:52 CSTM 1901,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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