2014-10-29 69 views
0

這是我的文件

air1.txt

fc:75:16:d2:91:a3 -90 targol 
78:54:2e:7f:e8:9e -88 DLink 
fc:75:16:d2:91:a3 -89 targol 
78:54:2e:7f:e8:9e -89 DLink 
78:54:2e:7f:e8:9e -88 DLink 
78:54:2e:7f:e8:9e -87 DLink 
fc:75:16:d2:91:a3 -90 targol 

我要計算在第三列第二列的每個名稱平均!這是我的腳本!

RSSI=$(awk '{print $3}' air1.txt | sort -u | while read line; do awk < air1.txt '{print $2,$3}' | grep $line | ./rssiMean.sh |cut -d'.' -f1 |awk '{print $line,$1}' ;done) 
echo $RSSI 

但結果是

-88 -88 -89 -89 

爲什麼我不能得到$line?! BTW ./rssiMean.sh計算平均值!

+0

這'AWK Jotne 2014-10-29 06:36:21

回答

0

您不能在awk腳本中使用bash變量。

而是使用awk的變量,並使用-v放慢參數賦值

如:

$var=123 
$awk -v awkvar=$var '{print awkvar}' 

這裏awkvar是創建並與$var

價值,使這個傳遞一個awk varible改變你的腳本

RSSI=$(awk '{print $3}' air1.txt | sort -u | while read line; do awk < air1.txt '{print $2,$3}' | grep $line | ./rssiMean.sh |cut -d'.' -f1 |awk -v line=$line '{print line,$1}' ;done) 
echo $RSSI 

所作的變化是

awk -v line=$line '{print line,$1}

AWK varible line被分配的bash varibale的值$line

+0

但是,如果你想採取列的平均數,我會建議Jotne的答案 – nu11p01n73R 2014-10-29 06:35:53

3

這應該這樣做:

awk '{a[$3]+=$2;b[$3]++} END {for (i in a) print i,a[i]/b[i]}' air1.txt 
DLink -88 
targol -89.6667 

它總結了數列#3的每一個數據,並通過點擊次數除以它。

+0

如果還想根據第三列對數據進行排序,我該怎麼辦? – sgh 2014-10-29 14:28:13

+0

@sgh只需將其管理爲'sort',它將根據路由類型進行排序:'awk'{a [$ 3] + = $ 2; b [$ 3] ++} END {for(i in a)print i,a [i]/b [i]}'air1.txt |排序' – Jotne 2014-10-29 18:16:42

+0

謝謝!它幫助了我! – sgh 2014-10-29 19:34:27