Автоматическое отключение от WLAN, если он не используется

Исходный входной файл

Принятие следующего формата ввода:

http://www.google.com,

www.google.com,

google.com

yahoo.com

С результатом, бывшим похожим на это:

google.com : 3 
yahoo.com : 1 

Трудно определить всю ситуацию, в которой Вы находитесь, но, учитывая вывод Вы показываете нам, я был бы склонен преобразовать входной файл сначала так, чтобы все строки имели форму:

google.com
google.com
google.com
yahoo.com

И затем петляйте через следующий набор команд:

$ grep -v "^$" data.txt | \
      sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
      sort | uniq -c
      3 google.com
      1 yahoo.com

Можно очистить формат вывода, таким образом, он соответствует тому, что Вы хотите как это:

$ grep -v "^$" data.txt | \
      sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
      sort | uniq -c | \
      awk '{printf "%s : %s\n", $1, $2}'
      google.com : 3
      yahoo.com : 1

РЕДАКТИРОВАНИЕ № 1

OP имел последующий вопрос, где он изменил исходные данные в примере. Таким образом считать этот тип входа:

http://www.google.com/absd/siidfs/kfd837382$%^$&,

www.google.com,

google.com

yahoo.com/list/page/jhfjkshdjf...

Вы могли использовать эту адаптированную остроту от первого примера:

$ grep -v "^$" data2.txt | \
      sed -e 's/,$//' \
          -e 's#\(http://[^/]\+\).*#\1#' \
          -e '/^[^http]/ s/^www\.//' \
          -e '/^[^http]/ s#\([^/]\+\).*$#\1#' | \
          sort | uniq -c | \
          awk '{printf "%s : %s\n", $1, $2}'
2 : google.com
1 : http://www.google.com
1 : yahoo.com
3
15.09.2016, 15:05
1 ответ

Вы можете использовать немного инструмента мониторинга полосы пропускания, например VNStat , для этого. Чтобы установить его на Minux Mint, делайте:

sudo apt-get install vnstat

Затем вы можете отслеживать среднюю скорость вашего соединения в течение некоторого указанного времени, и если скорость выходит ниже какой-то конкретного ограничения, то выключите WLAN.

Итак, давайте скажем, вы хотите отключить свой WLAN, если ваша средняя скорость загрузки падает ниже 5 Kb / s в течение времени мониторинга 30 секунд, тогда ваш код будет:

#!/bin/bash

#Taking sudo power initially because it will be required later on
sudo echo "Starting AutoDisconnect"

while true
do
  downSpeed=$(vnstat -ru 0 -tr 30 -i wlan0 | grep rx | grep -oP "\d+\.\d+")
  if (( $(echo "$downSpeed < 5.0" | bc -l) ))
  then
    sudo ifconfig wlan0 down
    exit  #exit now because we don't need monitoring since the interface is down
  fi
done

Объяснение Важные биты

-ru 0      ==> to show the rate in bytes/s (use "1" for bits/s)
-tr 30     ==> take average over 30 seconds usage
-i wlan0   ==> `vnstat` defaults to eth0 on my computer (marmistrz)
bc -l      ==> used in bash for doing arithmetic

grep rx             ==> considering only the receiving rate (i.e. download rate)
grep -oP "\d+\.\d+" ==> strip out the download rate from the output
2
27.01.2020, 21:27

Теги

Похожие вопросы