【问题标题】:Find largest/smallest of two numbers查找两个数字中的最大/最小
【发布时间】:2012-12-18 13:14:26
【问题描述】:

我有一个 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] 中较大的一个

谢谢

【问题讨论】:

  • 不要使用csh,这是有害的faqs.org/faqs/unix-faq/shell/csh-whynot
  • @BasileStarynkevitch +1 但 ITYM “不要使用 csh 进行脚本编写”。
  • 嗯,zshcsh 更适合交互式使用....所以即使作为登录 shell,csh 也不再适用了。

标签: linux awk csh


【解决方案1】:

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

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

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

【讨论】:

  • 我只是凭空挑选了 awk,因为我不确定完成任务的最佳方式。我将编辑问题以更好地强调我需要什么
  • @moadeep 你误解了我 - 根据你到目前为止告诉我们的一点点,awk 是正确的工具,但它适用于整个脚本,而不是使用 csh 来处理大部分脚本并只是调用 awk偶尔。
  • 感谢您的帮助。你的解决方案很棒。我使用 csh 的原因是我们使用的大多数图像处理软件都是基于 csh 和 c 的,因此为了保持一致性,我们的大多数脚本都是用 csh 编写的。我们正在慢慢过渡到 perl
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2012-04-18
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2020-04-03
相关资源
最近更新 更多