gpt4 book ai didi

linux - #awk If else 循环在 ksh 中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:18 24 4
gpt4 key购买 nike

我有一些代码,其中 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*

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

最佳答案

如果您准确地解释了您正在尝试做什么但您的 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") }'

关于linux - #awk If else 循环在 ksh 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com