AWK неожиданный персонаж - PullRequest
0 голосов
/ 03 апреля 2019

Я получил решение для моей проблемы от товарища.Вот код.

last | awk '{
if(NF>7){
if($(NF-5)=="Mar"){ # You may change the month or even accept it as a parameter
if($(NF-4) != date){datecount++};
match($(NF-3),/^([0-9]+)/,arr);
if(arr[1]>=8 && arr[1]<=16){
# Note I am using different time interval, change it accordingly
count++;
}
}
date=$(NF-4);
}
}
END{
datecount++;
print "Total logins   : ",count;
print "Total dates    : ",datecount;
print "Average logins : ",count/datecount;
}'

Я пытался сохранить его как name.sh и запустить его с bash name.sh, я попытался сохранить его name.awk и запустить как awk -f name.awk,но я все еще получаю ту же ошибку:

awk: 1: unexpected character '.'

Я не совсем уверен, что запускаю скрипт так, как должен.

ПРИМЕЧАНИЕ: я работаю на виртуальной машине в Ubuntu 18.04(Думаю) и пытаюсь запустить скрипт через терминал.

1 Ответ

1 голос
/ 03 апреля 2019

Кажется, у вас есть большие } и { скобки, закрывающие проблемы :) Всегда старайтесь делать отступы в своем коде хорошим способом, чтобы вы могли легко узнать, где начинается и заканчивается блок для ваших условий.Не могли бы вы попробовать следующее.

last | awk '{
  if(NF>7){
    if($(NF-5)=="Mar"){                
      if($(NF-4) != date){datecount++};
      match($(NF-3),/^([0-9]+)/,arr);
        if(arr[1]>=8 && arr[1]<=16){
          count++;
        }
      date=$(NF-4);
    }
  }
}
END{
datecount++;
print "Total logins   : ",count;
print "Total dates    : ",datecount;
print "Average logins : ",count/datecount;
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...