Não. O for(i=0;i<10;i++)
é um constructo de programação clássico (veja Traditional for loops ) que está presente em vários idiomas. Pode ser dividido em:
start-expression; end-condition; end-of-iteration-expression
Em outras palavras, o que escrevi acima significa "inicializar i para 0 e, enquanto i é menor que 10, fazer alguma coisa e então incrementar i por 1. Sim, a sintaxe é confusa, mas isso é apenas A forma como é. O end-of-iteration-expression
( ++x
neste caso) é executado uma vez no final de cada loop. É equivalente a escrever:
while(i<10){print i; ++i}
Quanto ao $x
, acredito que apenas verifica se existe um campo desse número e se seu conteúdo não é avaliado como falso (conforme explicado em Mathias responder abaixo ). $N
retornará verdadeiro se o número do campo N existir e não for um tipo de false
. Por exemplo:
$ echo "a b c d" | awk '($4){print "yes"}'
yes
$ echo "a b c d" | awk '($14){print "yes"}' ## prints nothing, no $14
$ echo "a b c 0" | awk '($4){print "yes"}' ## prints nothing, $4 is 0
Como você pode ver acima, o primeiro comando imprime yes
porque existe um $4
. Como não há $14
, o segundo não imprime nada. Então, para voltar ao seu exemplo original:
awk '{for(x=1;$x;x++)print $x}'
___ __ ___
| | |
| | |-----> increment x by 1 at the end of each loop.
| |--------> run the loop as long as there is a field number x
|------------> initialize x to 1