我正在尝试使用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
答案 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[*]}