Eu estava lendo esse script awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Eu quero saber qual é a função 1no final dela
Eu estava lendo esse script awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Eu quero saber qual é a função 1no final dela
Respostas:
Um awkprograma é 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 1final 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 1está 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 conditiondado, a condição padrão é true.)
Então aqui 1está a condição, que sempre é avaliada, truepois é diferente de zero. O actionomitido, 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}'