使用jq格式化输出并转换时间戳

我有以下代码,该代码列出了我帐户中所有当前的aws lambda函数:

aws lambda list-functions --region eu-west-1 | jq -r '.Functions | .[] | .FunctionName' | xargs -L1 -I {} aws logs describe-log-streams --log-group-name /aws/lambda/{} | jq 'select(.logStreams[-1] != null)' | jq -r '.logStreams | .[] | [.arn,.lastEventTimestamp] | @csv'

返回

aws:logs:eu-west-1:****:log-group:/aws/lambda/admin-devices-block-master:log-stream:2018/01/23/[$LATEST]64965367852942f490305cb8707d81b4",1516717768514


我只对admin-devices-block-master感兴趣,我想将时间戳1516717768514转换为strflocaltime("%Y-%m-%d %I:%M%p")

因此它应该只返回:

"admin-devices-block-master",1516717768514

我尝试过

aws lambda list-functions --region eu-west-1 | jq -r '.Functions | .[] | .FunctionName' | xargs -L1 -I {} aws logs describe-log-streams --log-group-name /aws/lambda/{} | jq 'select(.logStreams[-1] != null)' | jq -r '.logStreams | .[] | [.arn,[.lastEventTimestamp|./1000|strflocaltime("%Y-%m-%d %I:%M%p")]]' 
jq: error: strflocaltime/1 is not defined at <top-level>,line 1:
.logStreams | .[] | [.arn,[.lastEventTimestamp|./1000|strflocaltime("%Y-%m-%d %I:%M%p")]]                                                      
jq: 1 compile error
^CException ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

非常感谢任何建议

hdljh 回答:使用jq格式化输出并转换时间戳

strflocaltime需要jq版本1.6,这要感谢@oliv对其进行标记。

这是一个非常简单的示例,它将用本地时间用毫秒代替EPOCH。

date  -d @1572892409
Mon Nov  4 13:33:29 EST 2019

echo '{ "ts" : 1572892409356,"id": 2,"v": "foobar" } ' | \
          jq '.ts|=( ./1000|strflocaltime("%Y-%m-%d %I:%M%p")) '

{
  "ts": "2019-11-04 01:33PM","v": "foobar"
}

测试ts是否存在的第二个版本

( 
  echo '{ "ts" : 1572892409356,"v": "foobar" } ' ; 
  echo '{ "id":3 }' ; 
  echo '{ "id": 4,"v": "barfoo" }' 
) | jq 'if .ts != null 
        then  ( .ts|=( ./1000|strflocaltime("%Y-%m-%d %I:%M%p")) ) 
        else  . 
        end '
本文链接:https://www.f2er.com/3164530.html

大家都在问