我正在编写一些脚本,但遇到了一些命令。我想将一些字符串(月份)放入现有文本中的特定位置。例子:
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" }'