regex - 如何使用 bash 将文件中具有毫秒时间戳的列转换为日期?

标签 regex awk sed

我正在尝试将文件第一列中以毫秒时间戳为单位的所有值转换为日期格式 %Y-%m-%d %H:%M:%S。但输出是 Di 26.Mai 15:04:00 CEST 2020000。我正在使用这个命令:

cat throughput-vs-latency-40K-16.csv | sed 's/^/echo "/; s/\([0-9]\{10\}\)/`date -d @\1`/; s/$/"/' | bash

这是文件

"Time","pre_aggregate[0]-IN","pre_aggregate[10]-IN",
1590491460000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1590491475000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1590491490000,0,0,0,0,0,0,0,0,
1590491505000,290.51666666666665,290.53333333333336,
1590491535000,1027.15,1027.15,1028.85,1028.8666666666666,
1590491550000,1394.1166666666666,1394.15,1394.15,1394.1333333333334,
1590491565000,1475.5333333333333,1473.3666666666666,

我想要下面的输出(请只考虑格式并忽略正确的时间转换):

"Time","pre_aggregate[0]-IN","pre_aggregate[10]-IN",
"2020-05-07 08:05:45",0,0,0,0,0,0,0,0,
"2020-05-07 08:06:45",290.51666666666665,290.53333333333336,
"2020-05-07 08:07:45",1027.15,1027.15,1028.85,1028.8666666666666,
"2020-05-07 08:05:45",1394.1166666666666,1394.15,1394.15,1394.1333333333334,
"2020-05-07 08:08:45",1475.5333333333333,1473.3666666666666,

我在 sed 命令中缺少什么来获得这种格式的日期 2020-05-07 08:09:45

最佳答案

你可以使用这个awk:

awk 'BEGIN {
   FS=OFS=","
}
NR > 1 {
   n = $1/1000
   cmd = "date -d @" n " +\"%Y-%m-%d %T\""
   $1 = "\"" ( (cmd | getline out) > 0 ? out : $1 ) "\""
   close(cmd)
} 1' file

"Time","pre_aggregate[0]-IN","pre_aggregate[10]-IN",
"2020-05-26 07:11:00",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"2020-05-26 07:11:15",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"2020-05-26 07:11:30",0,0,0,0,0,0,0,0,
"2020-05-26 07:11:45",290.51666666666665,290.53333333333336,
"2020-05-26 07:12:15",1027.15,1027.15,1028.85,1028.8666666666666,
"2020-05-26 07:12:30",1394.1166666666666,1394.15,1394.15,1394.1333333333334,
"2020-05-26 07:12:45",1475.5333333333333,1473.3666666666666,

n=$1/1000 是在调用date 命令转换为Y-m-d H:M:S< 之前将毫秒值转换为秒值 格式。

关于regex - 如何使用 bash 将文件中具有毫秒时间戳的列转换为日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62025091/

相关文章:

windows - .bat 文件中的 Sed 等价物

linux - 如何更改 sed 的记录分隔符

python - unicode 字符串中的正则表达式

php - 正则表达式用于查找包含在两个小节之间并包含某些单词的字符串

iphone - NSRegularExpression 验证 URL

string - 如何在unix中剪切特定字符后的字符串

linux - 提取网页中两个已知字符串之间的文本并存储在变量中

python - 为什么这个正则表达式不起作用?

regex - 在正则表达式中使用变量

linux - 使用 sed/awk 在 php 文件中的两行之间添加行