Eu estava lendo esse script awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Eu quero saber qual é a função 1
no final dela
linux
shell-script
awk
Randhir Singh
fonte
fonte
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
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).fonte
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 que1
está modificando a declaração anterior. Ou você pode pensar que1
é 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:Cada formato de instrução awk é
condition {action}
. Se não houver{action}
, a ação padrão é{print}
. (Se não forcondition
dado, a condição padrão étrue
.)Então aqui
1
está a condição, que sempre é avaliada,true
pois é diferente de zero. Oaction
omitido, portanto, o padrão{print}
é executado. Você pode pensar desta maneira:fonte
1
significa imprimir todas as linhas.A declaração awk é a mesma da escrita:
fonte