Imprimir mês entre duas palavras

3

Eu estou escrevendo alguns scripts e fiquei preso com alguns comandos. Eu gostaria de colocar uma string (mês) em um lugar específico no texto existente. Exemplo:

Left Right 

Como posso colocar algum texto entre esquerda e direita? Eu tentei imprimir, mas não funciona como eu quero.

date +'%b' | awk '{print "Left " $1} {print "Right"}'

Este adiciona uma nova linha, que não quero adicionar.

Left Jun
Right
    
por blackhawk 05.06.2017 / 13:11

3 respostas

13

date "+Left %b Right"

Você pode colocar as cadeias no local dentro do comando date . Não verificado em sistemas operacionais, mas é funcional em GNU date .

    
por 05.06.2017 / 14:17
8

Isso porque o comando print de awk insere uma nova linha por padrão. Você pode imprimir a coisa inteira de uma só vez para que apenas uma print seja usada:

$ date +'%b' | awk '{print "Left " $1 " Right"}'
Left Jun Right

Ou use printf :

$ date +'%b' | awk '{printf "Left "; printf "%s", $1; printf " Right\n"}'
Left Jun Right

Usar printf é inútil aqui, eu apenas incluí-lo como um exemplo e mostrar que ele não adiciona \n por padrão.

    
por 05.06.2017 / 13:15
4

Sua linha awk tem duas instruções separadas. Aqui está escrito longhand

date +'%b' | awk '
    {print "Left " $1}
    {print "Right"}
'

O que acontece é que, para cada linha de entrada, cada instrução awk é avaliada e executada. Essas duas instruções não têm a expressão opcional na frente (por exemplo, $1 == "apple" { print "I love fruit" } , portanto, elas são sempre executadas.

Assim, para cada linha de entrada (sua linha única do comando date ), você obterá o {print "Left " $1} e, em seguida, o {print "Right} . As instruções print terminam sua saída com o atual separador de registros de saída ( ORS variable), que por padrão é nova linha (NL), portanto você obtém duas linhas de saída.

Como alternativa, você poderia usar isso, que tem apenas uma instrução awk , contendo apenas uma instrução print , portanto, apenas uma NL de terminação:

'date +'%b' | awk '{ print "Left", $1, "Right" }'
    
por 05.06.2017 / 14:15

Tags