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
.
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
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
.
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.
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" }'