awk将不会打印换行符
问题描述:
我正在使用下面的代码来更改现有的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
本身。
BEGIN{
#append1
}
...
到:
命令./tfb.a "c"
应的代码更改
BEGIN{
prefc=0
#append1
}
...
但是,它给了我一个样样在行。
有谁知道这是为什么?
答
如果你把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“words”。您可以在shell(yikes)中使用$IFS
变量,也可以使用双引号。
如果你正在运行一个现代sh
(例如ksh
或bash
,而不是“经典”谍影重重sh
),你可能还需要使用$()
语法(这是比较容易找到匹配的开始/结束分隔符)。
答
这样做。从外壳传递变量使用正确的awk -v
#!/bin/bash
toinsert="$1"
awk -v toinsert=$toinsert '
/#append1/{
$0="pref"toinsert"=0\n"$0
}
{print}
' file > temp
mv temp file
输出
$ cat file
BEGIN{
#append1
}
$ ./shell.sh c
BEGIN{
prefc=0
#append1
}
仍然不起作用。同样的问题。 – 2010-02-01 23:52:28
'awk'是否包裹在'echo'中? – 2010-02-01 23:53:56
丢失回声并重试。严重的是,我不知道回声是什么。看我的输出。否则,显示你的代码的更多细节并描述你想要清楚的内容。 – ghostdog74 2010-02-01 23:56:05