Problema no parâmetro de entrada awk no ksh

0

Estou executando este script:

INPUTNAME=ABC.XYZ
FILENAME="Sample.xml"

    awk -v inputName=$INPUTNAME '
      /<machine.*name=/ { f=1 ; m=0 ; res="" }
      f { res = res $0 ORS }
      f && /<details input="inputName"/ { m=1 }
      /<\/machine>/ { f=0 ; if (m) print res $0 }
     ' $FILENAME

para obter uma saída como esta

<machine name="sample1" min="1" max="10" idleTime="300" backend="ABC,XYZ">
                <handler className="com.abc.xyz.qwerty.foo.FooBar" />
                <details input="ABC.XYZ" suggExpiry="30" minExpiry="4" maxExpiry="500"/>
                </machine>

mas a entrada do parâmetro está falhando. O que parece estar errado no roteiro?

NOTA:

Eu corri com valores codificados (não usando parâmetros) e ele roda suavemente

    
por Philip Morris 03.06.2015 / 12:40

2 respostas

1

Não estou certo de que o awk substituirá uma variável pelo seu valor em

 f && /<details input="inputName"/ 

você pode querer substituir por

 f && /<details input="/ && index($2,inputName) > 0

editar:

A parte final do awk deve ser:

    /<machine.*name=/ { f=1 ; m=0 ; res="" }
    f { res = res $0 ORS }
    f && /<details input="/ && index($2,inputName) > 0 { m=1 ;}
    /<\/machine>/ { f=0 ; if (m) print res  ;  } ## last line already in res
    
por 03.06.2015 / 12:59
0

Como inputName é uma variável, você pode não usar as constantes repexp /.../ (como em f && /<details input="inputName"/ ). Em vez disso, use regexps dinâmicos por meio de strings:

f && $0 ~ "<details input=" inputName

onde você concatena a string "..." com a variável inputName .

(Nota: Como você está processando XML, lembre-se de que, ao processar tags de fim XML, em strings qualquer \ precisará de um nível extra de escape.)

    
por 03.06.2015 / 13:08