-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
fieldcomeç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