2012-12-18 39 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