Precisa passar vários valores de um arquivo como um argumento

0

O arquivo contém:

Firstname=ABC
Lastname=XYZ
Country=USA

Firstname=DEF
Lastname=UVW
Country=UK

É necessário passar Firstname , lastname e Country para uma função no script como argumento e repetir o mesmo para o segundo conjunto e assim por diante.

Uso da Função: Se algum deles estiver faltando, como Country= , então deve sair se todos os 3 parâmetros tiverem valores que devem executar um comando.

    
por Rakesh R 06.10.2017 / 12:58

1 resposta

0

Talvez tente algo assim?

awk 'BEGIN{RS="\n\n"}
     {
         split($1, a, "="); fname = a[2]; 
         split($2, b, "="); lname = b[2];
         split($3, c, "="); country = c[2];
         if (fname != "" && lname != "" && country != "") {
             command = "/path/to/your/script.sh "fname" "lname" "country;
             system(command);
         }
      }' input_file.txt

Eu tentei substituindo /path/to/your/script por echo e exibi os campos na ordem correta.

Observe que, se um campo estiver faltando para um determinado primeiro nome, sobrenome, combinação de países, o comando não será executado para essa combinação específica e passará diretamente para o próximo.

Se você quiser que o comando awk saia com um código de retorno diferente de zero ao encontrar um campo vazio e não tente executar o comando nas próximas combinações, tente isto:

awk 'BEGIN{RS="\n\n"}
     {
         split($1, a, "="); fname = a[2]; 
         split($2, b, "="); lname = b[2];
         split($3, c, "="); country = c[2];
         if (fname != "" && lname != "" && country != "") {
             command = "/path/to/your/script.sh "fname" "lname" "country;
             system(command);
         } else {
             print "error: empty field in input file !";
             exit 1
         }
      }' input_file.txt

Em seguida, você pode testar seu código de retorno na variável $? da shell. Se não for zero, um campo está ausente em algum dos seus arquivos de entrada e todos os comandos desse campo ausente e não foram executados.

    
por 06.10.2017 / 14:06