打印两个单词之间的月份

打印两个单词之间的月份

我正在编写一些脚本,但遇到了一些命令。我想将一些字符串(月份)放入现有文本中的特定位置。例子:

Left Right 

如何在左侧和右侧之间放置一些文本?我尝试过打印,但它不能按我想要的方式工作。

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

这添加了新行,我不想添加它。

Left Jun
Right

答案1

date "+Left %b Right"

您可以将字符串放在date命令本身中的适当位置。未跨操作系统进行验证,但它可以在GNU date.

答案2

这是因为print命令awk默认插入换行符。您可以一次打印整个内容,以便只print使用一次调用:

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

或者使用printf

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

在这里使用printf是没有意义的,我只是将其作为示例并表明它\n默认情况下不会添加 a 。

答案3

您的awk行实际上有两个单独的语句。这里是手写的

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

所发生的情况是,对于每一行输入,每个awk语句都会被评估并执行。这两个语句前面没有可选表达式(例如,$1 == "apple" { print "I love fruit" }因此它们总是被执行。

因此,对于每一行输入(来自命令的单行date),您将得到{print "Left " $1},然后得到{print "Right}.这print语句以当前的值结束其输出输出记录分隔符ORS变量),默认情况下是换行符(NL),因此您会得到两行输出。

作为替代方案,您可以使用它,它只有一个awk语句,仅包含一个print语句,因此只有一个终止 NL:

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

相关内容