2010-02-01 48 views
2

我正在使用下面的代碼來更改現有的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 
} 
... 

但是,它給了我一個樣樣在行。

有誰知道這是爲什麼?

回答

2

如果你把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),你可能還需要使用$()語法(這是比較容易找到匹配的開始/結束分隔符)。

2

這樣做。從外殼傳遞變量使用正確的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