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(例如kshbash,而不是“经典”谍影重重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 
} 
+0

仍然不起作用。同样的问题。 – 2010-02-01 23:52:28

+0

'awk'是否包裹在'echo'中? – 2010-02-01 23:53:56

+0

丢失回声并重试。严重的是,我不知道回声是什么。看我的输出。否则,显示你的代码的更多细节并描述你想要清楚的内容。 – ghostdog74 2010-02-01 23:56:05