我使用以下代码更改现有的awk脚本,以便我可以使用简单的命令添加越来越多的案例。
echo `awk '{if(/#append1/){print "pref'"$1"'=0\n" $0 "\n"} else{print $0 "\n"}}' tf.a
请注意,第一次打印是"pref'"$1"'=0\n"
,因此它指的是其环境中的变量$1
,而不是awk
本身。
命令./tfb.a "c"
应该更改代码:
BEGIN{
#append1
}
...
为:
BEGIN{
prefc=0
#append1
}
...
然而,它在一条线上给了我一切。
有谁知道这是为什么?
答案 0 :(得分:2)
这样做。使用-v
将变量从shell传递到awk#!/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
}
答案 1 :(得分: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“单词”。你可以在shell中使用$IFS
变量(yikes),或者你可以使用双引号。
如果您运行的是现代sh
(例如ksh
或bash
,而不是“经典”Bourne sh
),您可能还想使用{ {1}}语法(更容易找到匹配的开始/结束分隔符)。