2012-11-30 74 views
2

我有以下結構(只有一行)如何用awk變量在外殼

col1 col2 col3 col4 
---------------------- 
12 34 14 10 

什麼,我需要做的就是我要取COL2和COL4和使用的外殼,值。

a=$(awk 'NR<2{$2}') 
b=$(awk'NR<2{$4}') 

我必須在我的shell腳本中使用a和b。 但這不是一個好主意,因爲我使用awk兩次,而我正在提取像這樣的值。

awk'NR<2{ a=$2;b=$4}'

,但我不知道我可以在我的外殼使用a和b。

回答

4

用eval你可以在一個awk命令中分配更多的shell變量。看到下面的測試:我只是複製你的輸入例如

kent$ echo $a,$b 
, 

kent$ cat test 
col1 col2 col3 col4 
---------------------- 
12 34 14 10 

kent$ eval $(awk 'NR==3{print "a="$2;print "b="$4}' test) 

kent$ echo $a,$b 
34,10 

注意到,與頭/標題等於是在我的腳本的數據線是NR = 3。你可以調整它,如果它不是你的情況。

+0

不要使用eval,除非它是絕對必要的,在這種情況下它不是。 –

1

內置的read在這裏很有用。

read _ a _ b _ < <(tail -n +3 data.txt) # Assign the columns you don't care about to _ 
echo $a,$b 

這避免了使用eval,這通常應該避免,如果你能找到另一種選擇。

0
$ v=($(awk 'NR==3{print $2 ORS $4}' file)) 
$ a="${v[0]}" 
$ b="${v[1]}" 
$ echo "$a,$b" 
34,10