como executar vários comandos com o awk via ssh?

0

Estou com dificuldade no comando abaixo. Algo não está certo com o comando awk. Eu tentei colocar backslash mas ainda não é bom. Qualquer um pode apontar onde a minha sintaxe está errada?

for i in $(cat db_hostlist2.txt | grep -v '^#'); do
  echo "Checking for $i";
  ssh admin@$i '
    . ./.bashrc; echo "Hostname : 'hostname'";
    echo -e "Total DB is : 'ps -ef | grep smon | grep -v grep | wc -l'\n";
    echo -e "Total DB is : \n'ps -ef | grep smon | grep -v grep |awk -F_ '{print $3}''\n"
  ';
done

Saída:

Hostname : TEST123
Total DB is : 3

awk: cmd. line:1: {print
awk: cmd. line:1:       ^ unexpected newline or end of string
Total DB is :
    
por Eddy.Ng 01.09.2015 / 10:21

2 respostas

1

for HOST in $(grep -v '^#' db_hostlist2.txt)
do
        echo "Checking for $HOST"
        ssh admin@$HOST <<EOF
echo "Hostname : " \$(hostname)
echo -e "Total DB is : \$(ps -ef | grep smon | grep -v grep | wc -l)\n"
echo -e "Total DB is : \n\$(ps -ef | grep smon | grep -v grep |awk -F_ '{print \}')\n"
EOF
        echo "$HOST Complete"
done

Tudo entre os dois EOFs é tratado normalmente e executado remotamente, sem necessidade de escapar de caracteres especiais, exceto quando se usa $ (cmd) para executar um comando remoto. Você pode colocar variáveis locais lá, se quiser.

    
por 01.09.2015 / 16:13
0

isso parece mais complicado.

minha proposta:

for i in $(cat db_hostlist2.txt | grep -v '^#')
do 
     echo "Checking for $i"
     ssh admin@$i '. ./.bashrc;   
          echo "Hostname : "hostname ;
          echo -e "Total DB is : " ;
          ps -ef | grep -c [s]mon ;
          echo " DB are : " \
          ps -ef | grep [s]mon  |awk -F_ \'{print $3}\' ' 
 done

onde

  • você não se preocupará com a nova linha dentro da aspa simples. (newline inside 'está OK)
  • grep smon | grep -v grep é substituído por grep [s]mon , o que não se aplica.
  • ps -ef | grep smon | grep -v grep | wc -l é substituído por ps -ef | grep -c [s]mon , que retorna a contagem de itens.

  • echo -e "text um comando \n" é substituído por echo text ; a command (por que usar -e e adicionar \ n? também a maioria dos comandos produz uma nova linha).

por 01.09.2015 / 11:05