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

如何格式化CSV文件中的时间戳列?,csv,unix,awk,timestamp,date-format,Csv,Unix,Awk,Timestamp,Date Format,我要将CSV的第一列(以毫秒为单位的unix时间戳)格式化为如下命令的格式: date -d @$( echo "($line_date + 500) / 1000" | bc) 其中$line_date类似于1487693882310 我的文件包含以下信息: 1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,, 1487613634268,,,,,,localhost.localdomain,Se

我要将CSV的第一列(以毫秒为单位的unix时间戳)格式化为如下命令的格式:

date -d @$( echo "($line_date + 500) / 1000" | bc)
其中$line_date类似于1487693882310

我的文件包含以下信息:

1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
1487613634268,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,,
1487614351573,,,,,,spadmin,logout,,,,,,,, ,,,,
1487614500536,,,,,,System,run,Perform Maintenance,,,,,,, ,,,,
我希望它是这样的:

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,,,,,,, ,,,,
echo 1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,, | awk  'BEGIN{OFS=FS=","}{$1=strftime("%a %b %d %H:%M:%S %Z %Y", $1)}1'
我尝试过这个,但没有成功:

awk 'BEGIN{FS=OFS=","}{$1=`date -d @$( echo "($date_now + 500) / 1000" | bc)\`}1' file.csv
任何帮助都将不胜感激

非常感谢您的光临

亲切的问候


赫克托

一种方法是保持CSV行不变,并在它前面加上解析的时间戳作为第一列

比如:

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

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,,,,,,, ,,,,

或者,您可以重建第一个字段,然后按如下方式打印整个记录:

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,,,,,,, ,,,,
echo 1487152859086,,,,,,localhost.localdomain,ServerUpDown,ServerUp,,,,,,, ,,,, | awk  'BEGIN{OFS=FS=","}{$1=strftime("%a %b %d %H:%M:%S %Z %Y", $1)}1'
您将得到以下结果:

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

谢谢你的提示!就这样!伟大的谢谢