awk 不会打印新行字符
我使用下面的代码来更改现有的 awk 脚本,以便我可以使用简单的命令添加越来越多的案例。
echo `awk '{if(/#append1/){print "pref'"$1"'=0\n" $0 "\n"} else{print $0 "\n"}}' tf.a
请注意,第一个打印是 "pref'"$1"'=0\n"
,因此它引用的是其环境中的变量 $1
,而不是 awk 中的变量
$1
本身。
命令 ./tfb.a "c"
应该将代码从: 更改
BEGIN{
#append1
}
...
为:
BEGIN{
prefc=0
#append1
}
...
但是,它在一行上提供了所有内容。
有谁知道这是为什么?
I am using the below code to change an existing awk script so that I can add more and more cases with a simple command.
echo `awk '{if(/#append1/){print "pref'"$1"'=0\n" $0 "\n"} else{print $0 "\n"}}' tf.a
note that the first print is "pref'"$1"'=0\n"
so it is referring to the variable $1
in its environment, not in awk
itself.
The command ./tfb.a "c"
should change the code from:
BEGIN{
#append1
}
...
to:
BEGIN{
prefc=0
#append1
}
...
However, it gives me everything on one line.
Does anyone know why this is?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您直接从等式中取出 awk,您可以看到发生了什么:
反引号运算符过早地将输出扩展为 shell“单词”。您可以在 shell 中使用
$IFS
变量(哎呀),或者您可以只使用双引号。如果您运行的是现代
sh
(例如ksh
或bash
,而不是“经典”Bournesh
) ,您可能还想使用$()
语法(更容易找到匹配的开始/结束分隔符)。If you take
awk
right out of the equation you can see what's going on:The backtick operator expands the output into shell "words" too soon. You could play around with the
$IFS
variable in the shell (yikes), or you could just use double-quotes.If you're running a modern
sh
(e.g.ksh
orbash
, not the "classic" Bournesh
), you may also want to use the$()
syntax (it's easier to find the matching start/end delimiter).这样做。 将变量从 shell 正确传递到 awk
使用 -v输出
do it like this. pass the variable from shell to awk properly using -v
output