2012-12-18 42 views
1

我有一个csh脚本,在这个脚本中我可以访问几个头文件来提取各种边界框的xmin,ymin坐标。有没有一种简单的方法来查找minx,maxx,miny maxy从回送到awk等东西。例如查找最大/最小的两个数字

set minx=`echo $x1\t$x2 | awk {something}` 

set maxx = `echo $x1\t$x2 | awk {something else} 

我怀疑awk是最好的方法去,我不确定是什么。这里是我的一些代码:

set bb1 = `label_file -g "bounding box[0]" r$start_roi` 

@ bb1_x = $bb1[1] 
@ bb1_y = 1023 - $bb1[4] 
@ bb1_h = $bb1[4] - $bb1[2] 
@ bb1_w = $bb1[3] - $bb1[1] 

这将返回感兴趣的矩形区域的xmin,ymin宽度和高度。我将调整并重复上面的代码来查找第二个区域的相同参数。

我会那么做的是找到全球XMIN,YMIN,XMAX和YMAX为了定义一个较大的矩形完全包围较小2.

即集XMIN是从$数量较少BB1 [1]和$ BB2 [1] 组XMAX成为较大从$ BB1 [3]和$ BB2 [3]

感谢

+2

不要使用'csh',它是有害的http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ –

+0

@BasileStarynkevitch +1但ITYM“不要使用csh _for scripting_”。 –

+0

那么,'zsh'比'csh'更适合交互式使用....所以即使是登录shell,'csh'也不再好。 –

回答

3

这将打印的最小和最大给定一个管道或文件或数字的值:

awk '{ 
    min = ($0 =< min ? $0 : min) 
    max = ($0 >= max ? $0 : max) 
} 
END { 
    print min, max 
}' 

如果这不是您想要的,请提供一些示例输入和预期输出。

通过解析(c)shell中的文件并调用awk进行算术运算,您几乎可以肯定地以完全错误的方式接近您的大型任务。 awk被设计为解析文本文件。

编辑:根据您的更新问题,该代码段:

set bb1 = `label_file -g "bounding box[0]" r$start_roi` 
@ bb1_x = $bb1[1] 
@ bb1_y = 1023 - $bb1[4] 
@ bb1_h = $bb1[4] - $bb1[2] 
@ bb1_w = $bb1[3] - $bb1[1] 

,并假设“label_file”是一些命令输出4个空格分隔的数字,你能做到这一点的:

label_file -g "bounding box[0]" "r$start_roi" | 
awk '{ 
    bb1_x = $1 
    bb1_y = 1023 - $4 
    bb1_h = $4 - $2 
    bb1_w = $3 - $1 
}' 

你说你也有第二个地区。假设“$ start_roi”是变化的label_file的参数。然后,你可以这样做:

(label_file -g "bounding box[0]" "r$start_roi"; 
    label_file -g "bounding box[0]" "r$other_roi") | 
awk '{ 
    bb1_x[NR] = $1 
    bb1_y[NR] = 1023 - $4 
    bb1_h[NR] = $4 - $2 
    bb1_w[NR] = $3 - $1 
}' 

,并在该点bbl_x [1]将举办X值的start_roi箱而bbl_x [2]将举办X值的other_roi箱。您可以看到:

(label_file -g "bounding box[0]" "r$start_roi"; 
    label_file -g "bounding box[0]" "r$other_roi") | 
awk '{ 
    bb1_x[NR] = $1 
    bb1_y[NR] = 1023 - $4 
    bb1_h[NR] = $4 - $2 
    bb1_w[NR] = $3 - $1 
} 
END { 
    for (i=1; i<=NR; i++) { 
     print i, bbl_x[i], bbl_y[i], bbl_h[i], bbl_w[i] 
    } 
}' 

如果您需要帮助了解如何操作,请告诉我们。

+0

我刚刚拔出awk,因为我不确定完成任务的最佳方式。我将编辑问题以更好地强调我需要的东西 – moadeep

+1

@moadeep您误解了我 - 根据您迄今为止所告诉我们的信息,awk是正确的工具,但对于整个脚本而不是对脚本的大部分使用csh并且偶尔调用awk。 –

+0

感谢您的帮助。您的解决方案非常棒。我使用csh的原因是我们使用的大多数图像处理软件都基于csh和c,因此为了保持一致性,我们的大多数脚本都使用csh编写。我们正在慢慢移动到perl – moadeep