Como posso fazer esta declaração awk rodar no Windows?

1
awk '/DoLabelQuery\(self\)/||/QName\[[[[:digit:]][[[:digit:]]]/||/QName\[[[[:digit:]]]/ || /;BUTTON =/ || /endMethod/ || /endmethod/ ||  /add\(/ || /;CODE = /'  HELLO.fsl > x.txt

Eu sei que isso deve ser feito em um arquivo e executado usando awk -f . Eu simplesmente não consigo entender a sintaxe corretamente. O exemplo acima funciona no Linux no terminal.

Pode parecer complicado, mas tudo o que estou procurando são 5-6 exemplos de texto em que, se encontrado, leva a que a linha seja gravada em x.txt . O elemento QName name está procurando apenas QName[##] ou QName[#] .

    
por Peter Dixon 15.08.2017 / 18:50

2 respostas

1

Quando eu tentei executar o seu comando no começo, recebi o erro:

awk: '/DoLabelQuery\(self\)/
awk: ^ invalid char ''' in expression
'/QName\[[[[:digit:]][[[:digit:]]]/' is not recognized as an internal or external command,
operable program or batch file.
'/QName\[[[[:digit:]]]/' is not recognized as an internal or external command,
operable program or batch file.
'/' is not recognized as an internal or external command,
operable program or batch file.
'/endMethod/' is not recognized as an internal or external command,
operable program or batch file.
'/endmethod/' is not recognized as an internal or external command,
operable program or batch file.
'/add\' is not recognized as an internal or external command,
operable program or batch file.
'/' is not recognized as an internal or external command,
operable program or batch file.

que faz parecer que todas as partes do script awk estão sendo analisadas como palavras separadas e muitas delas estão sendo processadas como se fossem comandos após || . Isso porque, como essa pergunta SO mostra única Aspas não são realmente citações no shell do Windows cmd, como eles estão em (mais?) shells linux. cmd usa apenas aspas duplas, o que felizmente funciona bem para este comando, parece, então a solução aqui é usar:

awk "/DoLabelQuery\(self\)/||/QName\[[[[:digit:]][[[:digit:]]]/||/QName\[[[[:digit:]]]/ || /;BUTTON =/ || /endMethod/ || /endmethod/ ||  /add\(/ || /;CODE = /"  HELLO.fsl > x.txt

embora eu espere que colocar os comandos em um arquivo e usá-lo dessa maneira também funcione.

    
por 15.08.2017 / 19:52
0

Eu decidi usar o comando FINDSTR do Windows. É mais limitado, mas funciona corretamente na plataforma Windows. Consulte o link

    
por 15.08.2017 / 20:35

Tags