gpt4 book ai didi

bash - 用在 unix shell 中对值调用函数的结果替换值

转载 作者:行者123 更新时间:2023-11-29 09:22:07 25 4
gpt4 key购买 nike

我有一个看起来像这样的文本流:

----------------------------------------
s123456789_9780
heartbeat:test @ 1344280205000000: '0'
heartbeat:test @ 1344272490000000: '0'

那些长数字是以微秒为单位的时间戳。我想通过某种管道运行此输出,将这些时间戳更改为更易于理解的日期。

我有一个可以做到这一点的日期命令,只给出时间戳(带有以下冒号):

$ 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 脚本中生成的,我宁愿不依赖于外部文件)。

最佳答案

这可能对你有用(GNU sed):

sed '/@ /!b;s//&\n/;h;s/.*\n//;s#\(.\{10\}\)[^:]*\(:.*\)#date --date=@\1 +%Y/%d/%m-%H:%M:%S"\2"#e;H;g;s/\n.*\n//' file

解释:

  • /@/!b 退出并打印任何不包含 @ 后跟空格的行
  • s//&\n/ 在上述模式后插入一个换行符
  • h 复制模式空间(PS)到保持空间(HS)
  • s/.*\n// 删除直到并包括 @ 后跟一个空格
  • s#\(.\{10\}\)[^:]*\(:.*\)#date --date=@\1 +%Y/%d/%m-% H:%M:%S"\2"#e 从 PS 中剩余的内容,对前 10 个字符和从 : 到字符串末尾进行反向引用.将这些传递给 date 命令并将结果计算到 PS
  • H 将 PS 附加到 HS,同时插入一个换行符
  • g 将HS复制到PS中
  • s/\n.*\n//去掉字符串中原来的部分

关于bash - 用在 unix shell 中对值调用函数的结果替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com