Eu não sei se isso é um recurso do awk ou não, mas $0
se $1
comportar de maneira diferente se eu usar um arquivo de programa awk e usar o -f
vs se eu usar o mesmo comando no arquivo bash command line
.
Pegue o seguinte arquivo de teste:
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a,bc, x
Quando eu uso o seguinte comando na linha de comando bash:
awk "{ print $1 }" sample_input.txt
Eu recebo a seguinte saída:
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a,bc, x
Como você pode ver, esta é a saída de $ 0 e não de $ 1. $0 apenas gera linhas em branco.
Agora, quando uso o mesmo comando em um comando awk, recebo a saída correta:
{ print $1 }
awk -f test.awk sample_input.txt
a
a
a
a
a
a,bc,
Estou usando o Ubuntu 18.04. Isso é alguma característica estranha do awk
?
Este não é um recurso estranho,
awk
mas sim devido à maneira comum que o shell trata as variáveis entre aspas duplas.No comando
o shell
awk
substituiria, já que o código está entre aspas duplas,$1
pelo valor do primeiro parâmetro posicional (geralmente o primeiro argumento de linha de comando dado a um script ou função shell). Se este valor estiver vazio ou não definido, seuawk
script se tornaráque tem o mesmo efeito que
Para evitar que o shell se expanda
$1
, use aspas simples noawk
script:O comportamento do shell em relação às aspas duplas e simples é descrito pelo padrão POSIX:
( https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_02 )