找到最大/最小的两个数字

时间:2012-12-18 13:14:27

标签: linux awk csh

我有一个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]

中的较大值

感谢

1 个答案:

答案 0 :(得分: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]将保持start_roi框的X值,而bbl_x [2]将保持other_roi框的X值。你可以看到:

( 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]
   }
}'

如果您需要帮助确定从那里做什么,请告诉我们。