bash - 使用内部命令和正则表达式组引用的 Sed

标签 bash macos sed

我一直在努力解决以下问题:

我有一个包含以下内容的文件

1521471079313,219,HTTP Request 14,200,OK,PROD 50 rpm 1-10,text,true,,17665,204,1,1,177,0,35
1521471080337,263,HTTP Request 11,200,OK,PROD 50 rpm 1-10,text,true,,30268,202,1,1,169,0,0
1521471081404,245,HTTP Request 12,200,OK,PROD 50 rpm 1-10,text,true,,5134,201,1,1,210,0,37
1521471082453,125,HTTP Request 13,200,OK,PROD 50 rpm 1-10,text,true,,8910,201,1,1,106,0,0
1521471083381,217,HTTP Request 14,200,OK,PROD 50 rpm 1-10,text,true,,17665,204,1,1,188,0,0
1521471084402,303,HTTP Request 11,200,OK,PROD 50 rpm 1-10,text,true,,30268,202,1,1,226,0,41

列表中的第一项是 epoc 时间戳,我想将其转换为人类可读的。

我尝试了以下命令

cat file.csv|sed -E  "s/^([0-9]*)(,.*)/$(date -r \1 '+%m-%d-%Y:%H:%M:%S')\2/p"

它似乎有效,但后来我看到它会将其转换为:

01-01-1970:01:00:01,245,HTTP Request 13,200,OK,PROD 50 rpm 1-10,text,true,,8910,201,1,1,219,0,43
01-01-1970:01:00:01,276,HTTP Request 14,200,OK,PROD 50 rpm 1-10,text,true,,17665,204,1,1,217,0,0
01-01-1970:01:00:01,276,HTTP Request 14,200,OK,PROD 50 rpm 1-10,text,true,,17665,204,1,1,217,0,0
01-01-1970:01:00:01,242,HTTP Request 11,200,OK,PROD 50 rpm 1-10,text,true,,30268,202,1,1,216,0,34
01-01-1970:01:00:01,242,HTTP Request 11,200,OK,PROD 50 rpm 1-10,text,true,,30268,202,1,1,216,0,34
01-01-1970:01:00:01,147,HTTP Request 12,200,OK,PROD 50 rpm 1-10,text,true,,5134,201,1,1,119,0,0
01-01-1970:01:00:01,147,HTTP Request 12,200,OK,PROD 50 rpm 1-10,text,true,,5134,201,1,1,119,0,0

所有时间戳看起来都像是“时间的开始 :-)”,而不是我想要的。

我知道我在 sed 中有一个命令替换,还有两个基于 sed 命令中以前的正则表达式的组引用,但为什么它不起作用让我很困惑。

最佳答案

您可以使用 GNU awk 轻松解析 csv 文件。您的 $1 值是以毫秒为单位的 EPOCH 值。在将值除以 1000(即转换为秒)之后,您可以使用 strftime() 调用来打印人类可读的格式

awk 'BEGIN{FS=OFS=","}{$1=strftime("%c",($1/1000))}1' file

对于就地编辑,使用 gawk 或将输出移动到临时文件并将其还原为原始文件

tmpfile=$(mktemp /tmp/abc.XXXXXX)
awk 'BEGIN{FS=OFS=","}{$1=strftime("%c",($1/1000))}1' file > "$tmpfile"
mv "$tmpfile" file

关于bash - 使用内部命令和正则表达式组引用的 Sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366381/

相关文章:

javascript - 如何使用大括号通过 "shelljs"在单个命令中创建多个目录?

bash - 如何在 shell 中解码 URL 编码的字符串?

linux - "find -exec sh -c"内的 grep 变量扩展

regex - 在文件中查找单词并删除到文件末尾

linux - 如何从输出中获取每个字符串(主机名)?

java - OSGI 框架的 Eclipse 启动配置在 Mac 上不起作用

linux - Nohup:无法从控制台分离

python - 如何从 Homebrew 重新安装 python@2?

regex - 使用 sed 和正则表达式解析无线调查的 iwlist 命令输出

bash - 解析 VCF 文件的 INFO 字段