Bash WiFi网络作为群集条形图
我正在使用我的Airport实用程序获取我周围所有可用的WiFi网络,我希望使用gnuplot将它们显示为一个集群条形图。我不知道如何将数据转换成gnuplot可以使用的形式 我的Bash WiFi网络作为群集条形图,bash,shell,gnuplot,Bash,Shell,Gnuplot,我正在使用我的Airport实用程序获取我周围所有可用的WiFi网络,我希望使用gnuplot将它们显示为一个集群条形图。我不知道如何将数据转换成gnuplot可以使用的形式 我的邻居.dat如下所示: CHANNEL RSSI SSID 1 -54 DESIGN-DEV 1 -54 DESIGN-EMPLOYEE-DA 1 -54 DESIGN-GUEST 1 -56 DESIGN-DEV 1 -56 DESIGN-EMPLOYEE-DA 1 -56 DESIGN-GU
邻居.dat
如下所示:
CHANNEL RSSI SSID
1 -54 DESIGN-DEV
1 -54 DESIGN-EMPLOYEE-DA
1 -54 DESIGN-GUEST
1 -56 DESIGN-DEV
1 -56 DESIGN-EMPLOYEE-DA
1 -56 DESIGN-GUEST
1 -56 cwlanoffice
1 -56 llc-net
1 -66 DESIGN-DEV
1 -66 DESIGN-EMPLOYEE-DA
1 -66 DESIGN-GUEST
6 -56 WLAN-A23120
6 -60 WLAN-73CF94
6 -71 DESIGN-EMPLOYEE-DA
6 -71 DESIGN-GUEST
6 -72 DESIGN-DEV
6 -74 ecp-eco2016
6 -75 cwlanoffice
6 -75 llc-net
6 -76 CWLANGuest
6 -84 CWLANGuest
6 -84 TIMTIM
6 -85 llc-net
11 -39 WLAN-BKH64S
11 -67 cwlanoffice
11 -67 llc-net
11 -69 CWLANGuest
36 -57 WLAN-73CF94
36 -89 CWLANGuest
36 -89 cwlanoffice
36 -90 llc-net
44 -65 CWLANGuest
44 -66 cwlanoffice
44 -66 llc-net
44 -80 ecp-eco2016
52 -40 WLAN-BKH64S
52 -56 DESIGN-DEV
52 -56 DESIGN-GUEST
52 -57 DESIGN-EMPLOYEE-DA
100 -73 DESIGN-DEV
100 -73 DESIGN-GUEST
100 -74 DESIGN-EMPLOYEE-DA
108 -47 DESIGN-DEV
108 -47 DESIGN-EMPLOYEE-DA
108 -47 DESIGN-GUEST
108 -61 DESIGN-DEV
108 -61 DESIGN-EMPLOYEE-DA
108 -62 DESIGN-GUEST
132 -66 CWLANGuest
132 -66 cwlanoffice
132 -66 llc-net
对于,我需要将其转换为以下格式,SSID作为我的列,通道作为我的行:
SSID1 SSID2 SSID3 SSID4 SSID5
Channel1 -56 -20 -19 -47
Channel2 -38 -21 -28
你能帮我做到这一点吗?我最近的尝试是使用唯一的SSID,并尝试使用它们创建一个表
sort -k3 -u neighbours.dat | awk '{print $3}' > neighbours-ssids.dat
c=$(wc -l < neighbours-ssids.dat)
echo $c
for (( i = 0; i < $c; i++ )); do
awk 'NR=='$i neighbours-ssids.dat
done
sort-k3-u neights.dat|awk'{print$3}>neights-ssids.dat
c=$(wc-l
Agawk
解决方案如下:
BEGIN {
num_of_ssids = 0
num_of_channels = 0
}
{
ssid = $3
if (!(ssid in data_ssid)) {
data_ssid[ssid] = num_of_ssids;
idx_to_ssid[num_of_ssids] = ssid;
num_of_ssids++;
}
channel = $1
if (!(channel in data_chanel)) {
data_chanel[channel] = num_of_channels;
idx_to_channel[num_of_channels] = channel;
num_of_channels++;
}
data[channel][ssid] = $2
}
END{
for(j=0;j<num_of_ssids;j++) {
ssid = idx_to_ssid[j];
printf "\t%s", ssid;
}
printf "\n";
for(i=0;i<num_of_channels;i++) {
channel = idx_to_channel[i];
printf "%s", channel;
for(j=0;j<num_of_ssids;j++) {
ssid = idx_to_ssid[j];
printf "\t%s", data[channel][ssid];
}
printf "\n";
}
}
开始{
SSID的数量=0
信道数=0
}
{
ssid=$3
如果(!(数据中的ssid_ssid)){
数据_ssid[ssid]=_ssid的数量;
idx_to_ssid[num_of_ssid]=ssid;
SSID++的数量;
}
频道=$1
if(!(数据通道中的通道)){
数据信道[信道]=信道数;
idx_至_信道[num_of_信道]=信道;
通道数++;
}
数据[频道][ssid]=2美元
}
结束{
例如(j=0;jI不理解您希望实现的表格格式。例如,当SSID对同一通道有多个条目时,您该怎么办(例如,DESIGN-DEV对通道1有三个条目)?@user8153完全正确。这是我刚刚理解的。出于我的目的,我使用tail-n1
仅处理最高值。表的格式应该类似于。感谢您的快速回答。我正在这样尝试,双For循环
对我来说似乎是一个相当不合理的解决方案,但我t正在向正确的方向缓慢移动。