Por que existem ambos printf e print nesse comando?

1

Enquanto estudava sobre fail2ban , deparei com este comando. Eu nunca trabalhei com awk antes, apenas com sed . Eu não entendo porque existem tanto printf como print , aí:

awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Por que ambos estão lá?

BTW, se você conhece um, convido-o a compartilhar uma versão sed nos comentários.

    
por Arcticooling 07.01.2018 / 06:34

1 resposta

5

O primeiro printf é acrescentar o caractere # a cada linha do arquivo de entrada, que em awk é representado por $0 e, em seguida, a linha modificada (com # adicionado antes) é impressa para o console usando a cláusula print .

Você poderia simplesmente ignorar um e executá-lo na linha de comando para ver qual deles faz o quê.

seq 1 5 | awk '{ printf "# "; print; }'
# 1
# 2
# 3
# 4
# 5

Talvez seja possível escrever simplesmente com printf sozinho ou apenas com print sozinho como

awk '{ printf "# %s\n" , $0  }'

Você precisa do caractere de nova linha \n porque printf não imprime por padrão.

awk '{ print "# "$0  }'
    
por 07.01.2018 / 06:50