我有一个看起来像这样的文本流:
----------------------------------------
s123456789_9780
heartbeat:test @ 1344280205000000: '0'
heartbeat:test @ 1344272490000000: '0'
这些长数字是以微秒为单位的时间戳。我想通过某种管道运行此输出,该管道会将这些时间戳更改为更易于人类理解的日期。
我有一个 date 命令可以做到这一点,只给出时间戳(带有以下冒号):
$ date --date=@$(echo 1344272490000000: | sed 's/.......$//') +%Y/%d/%m-%H:%M:%S
2012/06/08-10:01:30
我想结束这样的事情:
----------------------------------------
s123456789_9780
heartbeat:test @ 2012/06/08-12:10:05: '0'
heartbeat:test @ 2012/06/08-10:01:30: '0'
我认为sed
不允许我匹配时间戳并将其替换为在其上调用 shell 函数的值(尽管我希望被显示错误)。也许awk
可以做到?我不是很熟悉awk
。
对我来说似乎很棘手的另一部分是让不匹配的线条不经过修改就通过。
我当然可以编写一个 Python 程序来执行此操作,但如果可能的话,我宁愿将它保存在 shell 中(这是在 shell 脚本中生成的,我宁愿不依赖外部文件)。