Extraindo dois valores da saída de um comando [duplicado]

0

Eu tenho um script que conduz uma pesquisa Whois em cada domínio de uma lista e preciso extrair a data de criação e a data de expiração. Eu tenho a primeira parte, mas não consigo obter a data de validade também. Não quero executar o domínio por meio de whois duas vezes ...

while IFS="," read domain rdate; do                     # Domain name and received date 
        cdate=( $(whois $domain | grep -m 1 -i Creation| awk -F" " '{print $3}') )
                # Harvest creation date from whois record for each domain 
                # expdate=??????
        printf "$domain,$cdate,$expdate \n"
done < "temp1.txt" 2> /dev/null # Sets the file to read in from and suppress error messages

Eu tentei definir o whois como "whod" assim, sem sorte:

whod=$(whois $domain|awk '{print $0}')
expdate=( $(echo $whod |grep -m 1 -i 'Expiration Date' | awk -F" " '{print $3}') )
echo $expdate
    
por Cynan Bexter 01.02.2016 / 11:17

1 resposta

1

Em primeiro lugar, não há sentido em awk '{print $0}' , que apenas imprime cada linha de entrada. Use whod=$(whois "$domain") em vez disso. De qualquer forma, o seu principal problema é que você não está citando suas variáveis. Isso causa todos os tipos de problemas, o mais importante é que quando você echo $whod , o que você obtém é uma única linha com todos os dados. Portanto, seu awk '{print $3}' está sendo aplicado a esta linha (em curto para maior clareza):

Whois Server Version 2.0 Domain names in the .com and .net [ ... ]

E a terceira palavra é Version , que, presumivelmente, é o que você recebe. Você também está usando arrays ( expdate=( $( echo $whod ... ) ) ) e não entendo o porquê. Pode haver várias correspondências? De qualquer forma, uma versão funcional do seu script é:

while IFS="," read domain rdate; do
  whod="$(whois "$domain")"
  cdate="$(echo "$whod" | grep -m 1 -i Creation| awk -F" " '{print $3}')"
  expdate="$(echo "$whod" |grep -m 1 -i 'Expiration Date' | awk -F" " '{print $3}')"
  printf "$domain,$cdate,$expdate \n"
done < "temp1.txt"
    
por 01.02.2016 / 12:14