РЕДАКТИРОВАТЬ5: Поскольку вы НЕ сказали, что MAC-адрес может быть найден либо после строки station
, либо после строки MAC Address
, поэтому мои предыдущие коды искали только station
строка теперь я добавил логику, чтобы проверить оба.Также учитывая, что <-------
только для целей понимания и не присутствует в файле Input_file.
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/MAC Address/{
if(value){
b[count]=value
}
a[++count]=$NF
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value<$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
max=max==""?array[2]:max
ip_max=max>array[2]?ip_max:a[i]
max=max>=array[2]?max:array[2]
va[max]=max>=array[2]?va[max]?va[max]:b[i]:b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
EDIT4: Согласно OP дляполучить НИЗКОЕ значение сигнала, затем можно попробовать выполнить следующее.
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value<$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
max=max==""?array[2]:max
ip_max=max>array[2]?ip_max:a[i]
max=max>=array[2]?max:array[2]
va[max]=max>=array[2]?va[max]?va[max]:b[i]:b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
РЕДАКТИРОВАТЬ3: (Это решение заключается в получении ВЫСОКОГО значения сигнала) ДобавлениеЧетвёртый ответ, поскольку OP снова изменил требование и сообщил, что из всех станций должно быть получено наилучшее значение сигнала, затем попробуйте выполнить следующее.
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
ip_max=max<array[2]?ip_max:a[i]
max=max<array[2]?max?max:array[2]:array[2]
va[max]=b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
EDIT2: OP говорит, что в файле Input_file может быть несколько signal
строк, тогда следующие могут помочь вам в этом.
awk '
/Station/{
if(val && value){
print "MAC Address: "val ORS value
val=value=""
}
val=$2
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
print "MAC Address: "val ORS value
}' Input_file
РЕДАКТИРОВАТЬ: Поскольку OP изменил требование и попросил получить самое сильное значение сигнала, здесь может помочь следующее (здесь, учитывая, что mac address
значение придет только 1 раз, но значения сигнала будут кратны, и нам нужно выбрать лучшее из них).
awk '
/Station/{
val=$2
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
print "MAC Address: "val ORS value
}' Input_file
Не могли бы вы попробовать один раз.
awk '/Station/{val=$2;next} /signal/{sub(/^ +/,"");print "MAC Address: "val ORS $0;val=""}' Input_file