2012-12-12 39 views
1

如何將一個shell變量傳遞給awk,進行設置,在另一個awk中使用它並將其打印出來?在awk中設置shell變量並重用

我想$ 0(所有字段)保存到一個變量第一,解析$ 6(ABC 123456M123000) - 獲得 '12300',做就可以了一系列檢查,如果它滿足,打印所有領域($ 0)

第1部分:我試圖做的事:

line="hello" 
java class .... | awk -F, -v '{line=$0}' | awk 'begin my range check code' | if(p>100) print $line } 

第2部分: $ 6 =「ABC 123456M123000」(字符串,我將解析) 一旦我存儲的所有字段到一個變量,我可以用這個解析$ 6:

awk 'begin {FS=" "} { print $2; len=length($2); p=substr($2,8,len)+0 ; print len,p ; if(p>100) print $line }' 

但我的問題是在part1中:如何將$ 0存儲到變量中,以便在我的檢查完成後,我可以打印它們?

回答

2

目前尚不清楚爲什麼您需要多個調用awk。從你的描述,它看起來像你只是想這樣做:

... | awk -F, '{split($6, f, "M")} f[2] > min' min=100 

,或者,如果你不能在「M」分裂,但需要使用SUBSTR(或一些其他的方法來提取所需的值):

... | awk -F, '{ split($6, f, " ")} 0+substr(f[2], 8) > min' min=100 
+0

我想打印所有的字段$ 1,$ 2 ...不只是分鐘。所以我想使用兩個awks。 另外,'M'只是一個例子,可以有任何字符。這就是根據索引 – swap

+0

使用substr的原因非常感謝!這樣可行! – swap

+0

解決方案的+1,但可以/應該只使用awks內置的條件/操作處理:'awk -F'{split($ 6,f,「M」)} f [2]> min'' –

0

隨着殼:

java ... | while IFS= read -r line ; do 
    sixth=$(IFS=,; set -- $line; echo "$6") 
    val=${sixth:11} 
    (($val > 100)) && echo "$line" 
done 

一些慶典-主義那裏。