Eu estava lendo esse script awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Eu quero saber qual é a função 1
no final dela
Eu estava lendo esse script awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Eu quero saber qual é a função 1
no final dela
Respostas:
Um awk
programa é uma série de pares condição-ação, estando as condições fora de chaves e as ações incluídas neles. Uma condição é considerada falsa se for avaliada como zero ou a sequência vazia, qualquer outra coisa é verdadeira (variáveis não inicializadas são zero ou sequência vazia, dependendo do contexto, portanto, são falsas). Uma condição ou ação pode ser implícita; chaves sem uma condição (quando a sua começa) são consideradas como uma condição verdadeira e sempre são executadas se forem atingidas, e qualquer condição sem uma ação imprimirá a linha se e somente se a condição for atendida.
O 1
final do seu script é uma condição (sempre verdadeira) sem ação; portanto, ele executa a ação padrão para cada linha, imprimindo a linha (que pode ter sido modificada pela ação anterior entre chaves).
Realmente não gosto desses tipos de atalhos, porque ofusca e engana como está sendo analisado. Quando você lê algo como awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, pode pensar que 1
está modificando a declaração anterior. Ou você pode pensar que 1
é um alias para {print}
, o que não é tecnicamente correto.
Na verdade, 1
é uma declaração completamente separada. Você pode separar as instruções assim:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
Cada formato de instrução awk é condition {action}
. Se não houver {action}
, a ação padrão é {print}
. (Se não for condition
dado, a condição padrão é true
.)
Então aqui 1
está a condição, que sempre é avaliada, true
pois é diferente de zero. O action
omitido, portanto, o padrão {print}
é executado. Você pode pensar desta maneira:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'