Como substituir o argumento do awk?

2

Eu quero simplificar o comando awk para uso comum, em vez de escrever awk '{print "rm -r"$4 }' cada vez que eu quiser escrever myawk "rm -r"$4 . Eu tentei escrever essa função

myawk() { awk '{ print $1 }' } e não funciona ..

Como posso escrever uma função como essa no Ubuntu?

    
por yura 26.09.2011 / 20:26

3 respostas

3

Para passar uma string de um shell script para um script awk embutido, use uma variável awk e o argumento -v .

myawk () {
  awk -v mystring="$1" '{ print mystring }'
}

Outra possibilidade é colocar a string em uma variável de ambiente e acessá-la através da matriz ENVIRON .

    
por 27.09.2011 / 01:54
1

Tente usar aspas duplas em vez de simples. link

Ou escrevendo assim:

myawk () { awk '{print '"$1"' }'; }

Mas posso ver muitos efeitos colaterais ruins ao tentar incluir strings de usuário simples. Por exemplo:

myawk '"hello"; system("echo there")"

Isso seria avaliado como awk '{print "hello"; system("echo there") }' , que pode exibir "olá" e "lá; mas mais comandos mal-intencionados poderiam ser enviados se não escapassem corretamente.

    
por 26.09.2011 / 21:00
-1

Que tal adicionar alias awk="awk '{print $1 }'" ao seu arquivo .bashrc?

    
por 26.09.2011 / 21:14

Tags