Buscando, mesclando e exportando dados de CURL

2

Antes de mais nada, o inglês não é minha língua. Vou tentar ser compreensível :-) Em segundo lugar, eu não sou um usuário regular do Linux, estou apenas começando.

Estou usando curl e a API de uma plataforma de bate-papo da web para obter o status da minha equipe. Cada membro possui um ID . Para cada ID , canalizo o resultado em um arquivo de texto agent-#.txt . Então, na minha pasta, se eu tiver 5 membros, obtenho 5 arquivos: agent-1.txt , agent-2.txt e assim por diante.

Cada arquivo contém isto:

{
    "used": 0,
    "last": "2018-06-01 15:25:55",
    "presence": [],
    "away": false,
    "free": 3,
    "last_utc": "2018-06-01 13:25:55",
    "last_timezone": "Europe/Paris",
    "online": true,
    "offline": true
}

Em seguida, usando sed , excluo os dados de que não preciso:

sed -i -e '/{/d; /last/d; /presence/d; /last_utc/d; /last_timezone/d; /offline/d; /}/d; s/"//g; s/,//g; s/[ ]//g; /^\s*$/d' *

Eu obtenho, para cada arquivo:

used:#
away:false
free:#
online:true

Onde # é um número (total usado e slots livres para o agente).

Ok, mas agora quero combinar esses dados para obter:

  1. O número total de membros cujo status é online:true
  2. O número total de espaços livres e usados

Idealmente, estou procurando por um comando que produza o total em outro arquivo. Mas eu tenho uma ideia (comando, roteiro completo) para lidar com todo o processo, também estou muito interessada!

    
por Grishkaone 02.08.2018 / 12:59

2 respostas

2

Usando seus arquivos JSON não modificados (antes de executar sed sobre eles) e jq :

Número de pessoas on-line:

jq -s 'map(select(.online))|length' agent-*.txt

Número de slots livres:

jq -s '[.[].free]|add' agent-*.txt

Número de slots usados:

jq -s '[.[].used]|add' agent-*.txt

Todos os três como um único documento JSON:

jq -s '{online: map(select(.online))|length, free: [.[].free]|add, used: [.[].used]|add}' agent-*.txt

O mesmo que acima, mas apenas os números:

jq -s '(map(select(.online))|length), ([.[].free]|add), ([.[].used]|add)' agent-*.txt
    
por 03.08.2018 / 13:19
0

Você pode concatenar os arquivos agent-*.txt e processá-los por awk.

Observe o -F : para usar a coluna completa como separador de campo.

Um exemplo incompleto:

#!/bin/sh

awk -F : -f - agent-*.txt <<EOF
/^used:/{
    used+=\;
}
/^online:true/{
    online++;
}
END{
    printf("used: %d\n", used);
    printf("online: %d\n", online);
}
EOF

Provavelmente, se você alterar cuidadosamente as expressões correspondentes, poderá pular a etapa sed .

    
por 02.08.2018 / 13:54