使用awk打印变量

时间:2014-12-29 16:59:36

标签: awk

我正在尝试使用awk打印变量。下面是我所知道的代码,但$svr似乎没有得到声明变量的值。

input.txt中:

string abcd
char   &%

代码:

svr="abc.net,def.net"

for n in $svr; do
awk '/string/ {if ($1 == "string") print $1, "$svr OK";}' input.txt
done

输出应该是这样的:

abc.net OK
def.net OK

1 个答案:

答案 0 :(得分:0)

您正在使用awk读取变量错误,请参阅此处: How to use shell variables in an awk script

#!/bin/bash
svr=(abc.net def.net)

for n in ${svr[*]}; do
   awk -vSVR="$n" '$1=="string" {f=1} END {if (f) print $1, SVR,"OK";}' input.txt
done

使用数组是存储服务器名称的更好方法。

如果你想测试文件并且只有输出就可以了,最好在END块中打印结果。

PS这仍然无法正常工作,因为它不清楚你喜欢在哪里测试。


这是试图查看我是否在正确的轨道上。

你有一组文件。您想测试文件是否具有特定设置。

cat abc.net
string home
More data

cat def.net
string work
more data

cat test
#!/bin/bash
svr=(abc.net def.net)
for n in ${svr[*]}; do
   awk -vI=$(cat input) '/string/ {if ($2~I) f=1} END {if (f) print FILENAME,"OK"}' "$n"
done

input文件设置为测试work

cat input
work

./test
def.net OK

然后将input设为主页

cat input
home

./test
abc.net OK

如果每个文件中只有一个匹配,则可以将其缩短一些并删除循环

cat test
#!/bin/bash
svr=(abc.net def.net)
awk -vI=$(cat input) '/string/ {if ($2~I) print FILENAME,"OK"}' ${svr[*]}