关于bash:将文件中的所有Unix时间转换为人类日期

Convert all Unix Time in a file to human date

我想将JSON数据文件中的所有Unix时间替换为相同的Unix时间,后跟一个可读的日期格式。

例如,我想将"1234567890123456"(以微秒为单位)替换为"12345678901234562009-02-14,00:31:30,sat"。

我试过了

1
sed -r 's/([0-9]{16})/\1'"`date -d @ \1`"'/g'

但它不起作用。我是Unix领域的新手,你能给我推荐一个解决方案吗?非常感谢。

友好

我附上了一份JSON文件的样本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
 "example": [
    {
     "query": {
       "text":"string 1",
       "id": [
          {
           "timestamp":"1234567890123456"
          }
        ]
      }
    },
    {
     "query": {
       "text":"string 2",
       "id": [
          {
           "timestamp":"1234567891123456"
          }
        ]
      }
    },
    {
     "query": {
       "text":"string 3",
       "id": [
          {
           "timestamp":"1234567893123456"
          }
        ]
      }
    }
  ]
}


这就是你要找的吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ gawk -F'"' '/timestamp/{sub($(NF-1),"&,"strftime("%Y-%m-%d,%H:%M:%S,%a",int($(NF-1)/1000000)))} 1' file
{
 "example": [
    {
     "query": {
       "text":"string 1",
       "id": [
          {
           "timestamp":"1234567890123456,2009-02-13,17:31:30,Fri"
          }
        ]
      }
    },
    {
     "query": {
       "text":"string 2",
       "id": [
          {
           "timestamp":"1234567891123456,2009-02-13,17:31:31,Fri"
          }
        ]
      }
    },
    {
     "query": {
       "text":"string 3",
       "id": [
          {
           "timestamp":"1234567893123456,2009-02-13,17:31:33,Fri"
          }
        ]
      }
    }
  ]
}

如果没有,请将预期输出与您的示例输入一起发布,这样我们就不会玩猜谜游戏。


您可以使用下面的日期命令。

1.获取当前时间-date +'%s,%Y-%m-%d,%H:%M:%S:,%a'

2.获取特定时间-date -d @1234567890 +'%s,%Y-%m-%d,%H:%M:%S:,%a