-F.
define o Separador de campos para .
: Dada uma linha a.b.c.
, o awk verá quatro campos: a
, b
, c
e (um campo vazio).
field=1
while (field < NF)
{
printf $field
if (field < NF - 1)
{
printf "."
}
field++
}
- O código faz um loop em cada campo e o imprime. Observe que
field
começa com 1, pois o campo 0 é a linha inteira (ou registro , para ser preciso). Como o cheque é< NF
, nunca atinge o último campo. - Até o segundo último campo, ele adiciona um
.
, presumivelmente como um separador de campo para outro programa a ser manipulado.
Todos disseram que esse código é uma maneira complicada de implementar basename
, um comando usado frequentemente para remover a extensão de um nome de arquivo :
$ basename hello_world.ksh .ksh
hello_world
Mesmo em awk
, uma maneira mais concisa seria decrementar o número de campos em um: NF--
e definir o Separador do campo de saída como .
, para que seja adicionado automaticamente entre os campos:
$ echo hello_world.ksh | awk -F. -v OFS=. '{NF--}1'
hello_world