jq: создание фильтра для вывода csv

Suponiendo un shell POSIX, desea un bucle foraquí, recorriendo "$@"que contiene los argumentos de la línea de comando:

for filename in "$@"; do
    lines=$(wc -l < "$filename")
    printf '%u lines in %s\n' "$lines" "$filename"
done

Usar todas las comillas es muy importante. Le permite pasar nombres de archivo que contienen espacios y otros caracteres.

./my_script.sh /var/log/syslog "$HOME/My Dir with Spaces/a file with spaces.txt"
0
04.06.2019, 17:11
1 ответ

Да, на самом деле проще сделать это только в JQ. Вы должны создать строку, которую вы хотите, в виде массива, используя фильтры JQ, а затем использовать фильтр @csvдля вывода строки в формате CSV (вместе с -r, чтобы CSV не получил дальше JSON -сбежал ).

Я не совсем понимаю, каковы ваши требования, так как ваш код на самом деле не соответствует выходным данным вашего примера, и не очевидно, что делать с повторяющимися/вложенными данными, но вот частично рабочий пример:

jq -r '.result[] |. as $result 
  |.triggers[] 
  | [$result.name, $result.groups[0].name, $result.interfaces[0].ip,.description] 
  | @csv'

, который, учитывая ваши тестовые данные, выводит

"love","Flower","192.168.1.190","The host is unavailable by ICMP"
"love","Flower","192.168.1.190","CPU load above {$CPU}% ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","The host has just been restarted (SysUptime {ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Sem resposta SNMP. Community {$SNMP_COMMUNITY}"
"love","Flower","192.168.1.190","Memory Usage is over {$MEM}% ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume C:\\ Label:  Serial Number 1ab4e15c ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume E:\\ Label:NETAPP_LUN_01  Serial Number 84048285 ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume F:\\ Label:NETAPP_LUN_02  Serial Number 6426fd9 ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume G:\\ Label:NETAPP_LUN_03  Serial Number 184b60f9 ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume H:\\ Label:NETAPP_LUN_04  Serial Number 88541457 ({ITEM.LASTVALUE})"
"love","Flower","192.168.1.190","Free disk space is less than {$DISK}% on volume I:\\ Label:NETAPP_LUN_07  Serial Number f23669bc ({ITEM.LASTVALUE})"

Цитирование больше, чем вы просили, но это полностью действительный CSV.

1
28.01.2020, 02:40

Теги

Похожие вопросы