Correspondência de linha para acionar argumento específico

0

Eu tenho um arquivo com 2 tipos de conteúdo, conforme abaixo.

QJKLJFLHLKJDGFIUD 03:12:23  
JHKJFDGDSFGDFGHDF 03:15:45  
HJIK  
ASDSdSADSADSSADSA 03:30:34  
DFDF  
KWQA

Eu tenho 2 binários. Um está no computador local e outro está no computador remoto.

Se a linha contiver um timestamp, eu tenho que chamar o binário local e passar a linha como argumento para o binário.

Se a linha não contiver um timestamp, eu tenho que chamar o binário remoto e passar a linha como argumento para o binário.

Como posso conseguir isso?

    
por stany 07.07.2013 / 05:09

2 respostas

0
awk 'NF==2 {system("/bin/echo " $0); next;}
  {system("/bin/echo " $0 " | rev"); next;}' inputfile

Editar 1:

awk 'NF==2 {system("ssh user@remote kimera " $0); next;}
  {system("kimera " $0); next;}' inputfile

Se kimera espera um único argumento, então você precisa de ... kimera \" $0 "\"" .

    
por 07.07.2013 / 05:26
1

Supondo que só pode haver um ou dois campos e que todas as linhas com dois campos contenham carimbos de data / hora, você poderá fazer isso em bash :

while read string date; do 
   ## If there are two fields, $string and $date, launch remote command
   if [[ $date ]] ; 
     then ssh user@remote kimera "$string $date"; 
   ## If there is only one field, no date, launch the local command
   else kimera $string; fi; 
done < file

Se você puder ter diferentes números de campos e precisar realmente verificar um carimbo de data / hora no formato NN: NN: NN, use isso:

perl -ne 'chomp; 
          if(/\d+:\d+:/){system("ssh user@remote kimera $_" )}
          else{system("kimera $_" )}
' file
    
por 07.07.2013 / 15:22