1

Может кто-нибудь объяснить, пожалуйста, что происходит в этой команде: Структура файла журнала:

IPsrc:IPdst: порт: пакеты

@ max=`cut -f4 -d: logfile | sort -n -r | head -1`
grep "$max"$ logfile | cut -f1,3,4 -d: | sort | uniq

Я не могу понять, как первая строка используется для определения шаблона для grep.

Я использую Ubuntu, чтобы проверить это.

Любая ссылка / объяснение полезно.

virtual@virtual-VirtualBox:~$ @max='cut -f4 -d: intrulog | sort -n -r | head -1' grep   "$max"$ intrulog | cut -f1,3,4 -d: | sort | uniq
virtual@virtual-VirtualBox:~$ 

Как видите, когда я выполняю эти команды, grep ничего не возвращает. Если я выполню команду в первой строке, я получу ожидаемый результат, но в первом случае $ max не передается grep как правильный шаблон фильтра

virtual@virtual-VirtualBox:~$ cut -f4 -d: intrulog | sort -n -r | head -1
24
virtual@virtual-VirtualBox:~$ 

ТОЛЬКО ДЛЯ ПОМОЩИ БУДУЩИМ ПОСЕТИТЕЛЯМ Структура intrulog(IPsrc:IPdst: порт: пакеты), сокращена до нескольких строк:

192.168.164.142:137.37.8.8:8080:5
192.168.160.37:137.37.8.5:8080:13
192.168.155.47:137.37.8.12:443:24
192.168.161.92:137.37.8.5:21:24
192.168.156.77:137.37.8.8:8080:13
192.168.164.84:137.37.8.9:8080:9

Ожидается, что команды будут возвращать IPSrc, порт и количество пакетов:

192.168.155.47:443:24
192.168.161.92:21:24

2 ответа2

2

РЕДАКТИРОВАТЬ (для уточнения вопроса):

Команды должны выполняться в две отдельные строки. Я считаю, что в этом есть и опечатка. Я считаю, что символ @ перед макс не является необходимым. Второй $ в команде grep также кажется ненужным. Наконец, в вашем примере одиночные кавычки вокруг команды cut должны быть галочками (`от клавиши ~ в противоположность '). Полная команда, вероятно, должна быть (в отдельных строках):

max=`cut -f4 -d: intrulog | sort -n -r | head -1`
grep "$max" logfile | cut -f1,3,4 -d: | sort | uniq

Если вы хотите запустить все как одну строку, добавьте точку с запятой между ними.

ОРИГИНАЛЬНЫЙ ОТВЕТ:

max присваивается значение cut -f4 -d: intrulog | sort -n -r | head -1 , которая делает следующее по порядку:

  • cut вызывается для обработки файла intrulog выбирая четвертый столбец в наборе ограниченного двоеточием :
  • sort вызывается для сортировки выходных данных cut чтобы поместить самые высокие числа в верх
  • head вызывается для уменьшения вывода до верхней строки.

Взятые вместе, он в основном берет самое высокое значение в четвертом столбце файла, называемого intrulog и возвращает его как значение max , которое grep затем ищет в logfile .

Из того, что находит grep cut затем вызывается снова , чтобы вернуться на 1 - й, 3 - й, и 4 - й колонны, которые затем сортируются по алфавиту sort и отделанные uniq только показать уникальные результаты.

0

Первая строка устанавливает переменную окружения с именем max, которую затем вызывает grep. $ Ссылается на переменную, которую вы установили в первой строке.

Попробуйте echo $USER или echo $HOME чтобы увидеть другие переменные окружения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .