2013-03-20 62 views
0

我想写一个代码,我已经使用了IF语句。 这里我想比较使用awk语句获得的2个字符串。 请帮助我...如果这是可能的。UNIX:将值传递给IF条件而不是值

if [ "awk '/$search/ {print $3}' rpt1.txt" -eq "awk '/$search/ {print $3}' rpt2.txt" ] 

回答

0

当然,使用$()或``。

if [ $(awk '/$search/ {print $3}' rpt1.txt) -eq $(awk '/$search/ {print $3}' rpt2.txt) ] 

如果你想字符串比较,而不是数字,你可能想=代替-eq虽然。

可能会读更好,如果你犯了一个功能太:

search_report() { 
    awk "/$1/ { print \$3 }" $2 
} 

if [ $(search_report $search rpt1.txt) -eq $(search_report $search rpt2.txt) ] 
... 
+0

非常感谢丹尼尔。我会按照你的信息进行。 – greatvedas 2013-03-20 13:06:44

0

可以stdout中捕捉到这样一个变量:

variable=$(command) 

试试这个

rpt1=$(awk '/$search/ {print $3}' rpt1.txt) 
rpt2=$(awk '/$search/ {print $3}' rpt2.txt) 

if [ "${rpt1}" == "${rpt2}" ]; then 
    echo "match"; 
fi 

运营商-eq仅适用于整数,这就是为什么我使用==代替。

更多有关捕获标准输出 http://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash-assign-variable-command-output/

这是运营商在bash的一个很好的总结 http://tldp.org/LDP/abs/html/comparison-ops.html