Используйте JQ для преобразования вывода AWS в CSV - PullRequest
0 голосов
/ 29 ноября 2018

Я использую JQ для анализа вывода команд aws в CSV.

aws ec2 describe-instances | jq '.Reservations[].Instances[] | [(.Tags[]|select(.Key=="Name")|.Value), .InstanceId, .PrivateIpAddress, .LaunchTime, .State.Name, (.Tags[]|select(.Key=="Owner")|.Value)] | @csv'

Это работает.Но в результате добавляются лишние кавычки и слэши, которые не нужны:

"\"USAWS1027-AWS\",\"i-0be1611d\",\"10.48.128.37\",\"2016-11-11T16:08:14.000Z\",\"stopped\""
"\"usamzdbd2153\",\"i-7e0d8b91\",\"10.1.233.153\",\"2015-02-19T16:57:57.000Z\",\"running\",\"tsenti\""

Почему это происходит?Есть ли способ, как я могу направить параметр @csv на jq, чтобы пропустить кавычки и обратные слэши?И просто оставьте запятые.

1 Ответ

0 голосов
/ 29 ноября 2018

По умолчанию jq испускает JSON, поэтому вы, вероятно, захотите использовать опцию -r:

$ jq -n '"\"a\"" | [.] | @csv'  
"\"\"\"a\"\"\""

$ jq -nr '"\"a\"" | [.] | @csv'
"""a"""

Кроме того, вы можете убрать крайние двойные кавычки любой строки, в которую они входят.,Например, рассмотрим:

$ jq -nr 'def s: gsub("^\"|\"$";""); "\"a\"" | [s] | @csv'
"a"

Вся свинья

Если вы хотите удалить кавычки вокруг строк, которые не содержат запятых, тогда подумайте:

echo '["usamzdbd2153","i-7e0d8b91","10.1.233.153","2015-02-19T16:57:57.000Z","running","tsenti"]' |
jq -r '
  def s: gsub("^\"|\"$";""); 
  def t: if test(",") then . else s end; 

  map(t) | join("\t") | gsub("\t";",")'

Выход:

usamzdbd2153,i-7e0d8b91,10.1.233.153,2015-02-19T16:57:57.000Z,running,tsenti
...