我有一个 csh 脚本,我在其中访问多个头文件以提取各种边界框的 xmin、ymin 坐标。有没有一种简单的方法可以从管道传输到 awk 之类的回声中找到 minx、maxx、miny maxy。例如
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] 中的较大者
等等
谢谢
最佳答案
这将打印给定管道或文件或数字的最小值和最大值:
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]
}
}'
如果您需要帮助确定从那里做什么,请告诉我们。
关于linux - 找出两个数字中最大/最小的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933838/