У меня есть запрос, как показано ниже:
dump=$(jq -j --raw-output '.aggregations | ."2" | .buckets[] | "\(.key),",
(."5" | .buckets[] | "\(.key),",
(."3" | .buckets[] | "\(.key),",
(."4" | .buckets[] | "\(.key),",
(."8" | .buckets[] | "\(.key),",
(."6" | .buckets[] | "\(.key),",
(."7" | .buckets[] | "\(.key),",
(."9" | .buckets[] | "\(.key),",
(."10" | .buckets[] | "\(.key),",
(."11" | .buckets[] | "\(.key),",
(."12" | .buckets[] | "\(.key),",
(."13" | .buckets[] | "\(.key),",
(."14" | .buckets[] | "\(.key),",
(."15" | .buckets[] | "\(.key),",
(."1" | ."hits" | .hits[] | ."_source" |
"\(."@timestamp")" | "\n"))))))))))))))' <<< "$cl_report")
echo -e "${dump}" >> report.csv
метка времени в формате ISO8601.
Я хочу преобразовать метку времени из UT C в мадридское время .
Мне нужно что-то вроде this :
dump=$(jq -j --raw-output '.aggregations | ."2" | .buckets[] | "\(.key),",
(."5" | .buckets[] | "\(.key),",
(."3" | .buckets[] | "\(.key),",
(."4" | .buckets[] | "\(.key),",
(."8" | .buckets[] | "\(.key),",
(."6" | .buckets[] | "\(.key),",
(."7" | .buckets[] | "\(.key),",
(."9" | .buckets[] | "\(.key),",
(."10" | .buckets[] | "\(.key),",
(."11" | .buckets[] | "\(.key),",
(."12" | .buckets[] | "\(.key),",
(."13" | .buckets[] | "\(.key),",
(."14" | .buckets[] | "\(.key),",
(."15" | .buckets[] | "\(.key),",
(."1" | ."hits" | .hits[] | ."_source" | "\
(."@timestamp") as $tstamp | "TZ Europe/Madrid" date -d $tstamp" | \n"))))))))))))))' <<< "$cl_report")
Bash выдает ошибку с жалобами на "and 'et c et c.
Как правильно выполнить это преобразование?
Хорошо. Кажется, есть ошибка с jq 1.5. Strftime et c неправильно читает TZ в этой версии.
jq 1.6 может помочь:
report_dump=$(TZ=Erope/Madrid jq1.6 -j --raw-output '.aggregations | ."2" | .buckets[] | "\(.key),",
(."5" | .buckets[] | "\(.key),",
(."3" | .buckets[] | "\(.key),",
(."4" | .buckets[] | "\(.key),",
(."8" | .buckets[] | "\(.key),",
(."6" | .buckets[] | "\(.key),",
(."7" | .buckets[] | "\(.key),",
(."9" | .buckets[] | "\(.key),",
(."10" | .buckets[] | "\(.key),",
(."11" | .buckets[] | "\(.key),",
(."12" | .buckets[] | "\(.key),",
(."13" | .buckets[] | "\(.key),",
(."14" | .buckets[] | "\(.key),",
(."15" | .buckets[] | "\(.key),",
(."1" | ."hits" | .hits[] | ."_source" | .["@timestamp"] | sub(".[0-9]+Z$"; "Z") | fromdateiso8601 | strflocaltime("%Y-%m-%dT%H:%M:%S %Z"), "\n"))))))))))))))' <<< "$cl_report")
Как показано выше, я передал выделенную временную метку в fromdateiso8601, чтобы получить секунды, а затем передал ее в strflocaltime, которая использует TZ для получения местного времени. .