como enviar saída de solicitação de curl para 2 comandos separados

3

Estou canalizando a saída de uma solicitação de curl para ficar de olho, para que eu possa extrair alguns dados. O código do gawk já está funcionando se eu estiver pesquisando o arquivo html que a solicitação de curl produz. No entanto, eu estava esperando simplesmente editar no lugar, já que eu só preciso alocar 2 variáveis de data. Eu estive procurando usar tee e substituição de processo. Existe alguma maneira de, de alguma forma, bifurcar a saída da solicitação de onda para atribuir 2 variáveis diferentes, ambas usando o gawk e a substituição de comandos.

Aqui está um trecho do meu código, ocultei todos os detalhes da solicitação de curl, mas ele vai puxar um relatório html que conterá: Sequência mais antiga, data e Sequência mais recente, data em linhas separadas. O gawk já foi testado nos dados.

curl -k -q "https://user:password@ipaddress/report" 

Eu quero que a saída do comando acima seja canalizada ou não para os dois comandos abaixo

date1="$(date -d $(gawk '/Newest Sequence/ {print $3,$4}') +%s)"
date2="$(date -d $(gawk '/Oldest Sequence/ {print $3,$4}') +%s)" 

Isso é possível sem criar um arquivo? Eu vou estar executando o pedido em intervalos freqüentes e enviando o resultado para um soquete, eu prefiro evitar arquivos desnecessários, se possível

    
por jewfro 26.03.2015 / 05:22

1 resposta

4

A sintaxe básica que você precisa é esta:

read date1 date2 < <( curl ... | gawk '...' )

Dessa forma, você precisa de apenas uma awk instance como ilustrado aqui (sem a conversão de segundos que você teria que adicionar; veja abaixo):

read date1 date2 < <( curl ... |
    awk '
      /Newest Sequence/ { new=$3" "$4 }
      /Oldest Sequence/ { old=$3" "$4 }
      END { print new, old }
      '
    )

(Se a ordem das datas no arquivo HTML for corrigida, isso pode ser simplificado imprimindo imediatamente as informações de data.)

Observe que gawk também tem as funções de tempo necessárias para que seu código date fique obsoleto. No código que mostrei você precisaria adicionar mktime() das chamadas do awk, ou como alternativa (para evitar as funções time do gawk ) fazer a conversão no nível da shell com date modificando as variáveis, como em:

date1=$(date -d "${date1}" +%s)
date2=$(date -d "${date2}" +%s)
    
por 26.03.2015 / 05:53