#awk如果其他循环不能在ksh中工作

时间:2014-09-10 08:55:02

标签: linux shell unix awk clearcase

我有代码,其中awk被传送到clearcase命令,其中If else循环不起作用。

代码如下:

#!/bin/ksh    
export dst_region=$1    
cleartool lsview -l | gawk -F":" \ '{ if ($0 ~ /Global path:/) { if($dst_region == "ABC" || $dst_region -eq "ABC") { system("echo dest_region is ABC");} 
else { system("echo dest_region is not ABC"); } }; }'

但是当我执行上面的脚本时,输出错误,

*$ ksh script.sh ABCD

dest_region is ABC

$ ksh script.sh ABC 

dest_region is ABC*

有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果你准确地解释了你想要做什么,但你的awk脚本可以被清理很多,那将是有用的:

 gawk -F":" -vdst_region="$1" '/Global path:/ { if (dst_region == "ABC") print "dest_region is ABC"; else print "dest_region is not ABC" }'

一般要点:

  • 我使用-v$1的值创建一个awk变量,这是脚本的第一个参数。这意味着您可以在脚本中更轻松地使用它。
  • awk的结构是condition { action },所以你不必要地在整个单行间使用if
  • $0 ~ /Global path:/可以更改为/Global path:/
  • ||的两边看起来他们都试图做同样的事情,所以我摆脱了那个在awk中不起作用的那个。使用==比较字符串。
  • system("echo ...")完全没必要。使用awk内置的print

您可以更进一步,完全删除if-else

 gawk -F":" -vdst_region="$1" '/Global path:/ { printf "dest region is%s ABC", (dst_region=="ABC"?"":" not") }'