awk 不会打印新行字符

发布于 2024-08-20 02:23:14 字数 494 浏览 4 评论 0原文

我使用下面的代码来更改现有的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥抱我好吗 2024-08-27 02:23:14

如果您直接从等式中取出 awk,您可以看到发生了什么:

# Use a small test file instead of an awk script
$ cat xxx
hello
there
$ echo `cat xxx`
hello there
$ echo "`cat xxx`"
hello
there
$ echo "$(cat xxx)"
hello
there
$

反引号运算符过早地将输出扩展为 shell“单词”。您可以在 shell 中使用 $IFS 变量(哎呀),或者您可以只使用双引号。

如果您运行的是现代 sh(例如 kshbash,而不是“经典”Bourne sh) ,您可能还想使用 $() 语法(更容易找到匹配的开始/结束分隔符)。

If you take awk right out of the equation you can see what's going on:

# Use a small test file instead of an awk script
$ cat xxx
hello
there
$ echo `cat xxx`
hello there
$ echo "`cat xxx`"
hello
there
$ echo "$(cat xxx)"
hello
there
$

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 or bash, not the "classic" Bourne sh), you may also want to use the $() syntax (it's easier to find the matching start/end delimiter).

甜中书 2024-08-27 02:23:14

这样做。 将变量从 shell 正确传递到 awk

#!/bin/bash
toinsert="$1"
awk -v toinsert=$toinsert '
/#append1/{
    $0="pref"toinsert"=0\n"$0
}
{print}
' file > temp
mv temp file

使用 -v输出

$ cat file
BEGIN{
#append1
}

$ ./shell.sh c
BEGIN{
prefc=0
#append1
}

do it like this. pass the variable from shell to awk properly using -v

#!/bin/bash
toinsert="$1"
awk -v toinsert=$toinsert '
/#append1/{
    $0="pref"toinsert"=0\n"$0
}
{print}
' file > temp
mv temp file

output

$ cat file
BEGIN{
#append1
}

$ ./shell.sh c
BEGIN{
prefc=0
#append1
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文