Быстрый способ получить информацию из огромного лог-файла на unix

Xubuntu - это Ubuntu для Xfce в качестве менеджера рабочего стола.

xubuntu-desktop - это виртуальный пакет, который устанавливает Xfce и некоторые полезные утилиты для рабочего стола на Ubuntu. Пытаясь установить на Debian, вы можете получить много боли.

Вы, конечно, можете установить Xfce на Debian, следуя инструкциям на этой странице.

(в основном apt-get install xfce4 xfce4-goodies, но прочитайте всю страницу).

Здесь вы можете узнать, какие пакеты устанавливаются на Ubuntu при установке xubuntu-desktop.

Если вы хотите научиться воссоздавать xubuntu-desktop, прочитайте страницу Xfce wiki и попробуйте сопоставить приложения, найденные в xubuntu-desktop, с их вариантами в Debian (возможно, они называются одинаково или очень похоже).

2
28.07.2017, 19:46
3 ответа

Используйте эту awkкоманду:

awk -F";" '/type=m/{flag=$3;next} /set_to_TRUE/ && ($3==flag)' infile.txt

он будет совпадать, если оба идентификатора сеанса были одинаковыми, а также отображались требуемые условия.

timestamp;hostname;sessionid-ABC;set_to_TRUE

выше напечатает всю строку, вы можете напечатать только нужный столбец, добавив print $3, чтобы иметь только идентификаторы сеансов, как показано ниже:

awk -F";" '/type=m/{flag=$3;next} /set_to_TRUE/ && ($3==flag){print $3}' infile.txt
1
27.01.2020, 22:03

С помощью grep это можно сделать довольно просто:

grep -E "(type=|set_to_)" file.txt | grep -A 1 "type=m" | grep -B 1 "set_to_TRUE" > file1.txt &

Поставь на задний план, выпей кофе и дай закончить. Не уверен, что «awk» или «sed» будут быстрее. 6гб много только для текста, поэтому как ни пытайся, это займет много времени.

Вы все равно увидите, когда он будет завершен, в консоли, как только вы нажмете Enter или введете другую команду как:

[1]+  Done                    grep --color=auto -E '(type=|set_to_)' file.txt | grep --color=auto -A 1 "type=m" | grep --color=auto -B 1 "set_to_TRUE" > file1.txt
1
27.01.2020, 22:03

Предположения:

  • вам нужны только имена сеансов
  • строка "type=" будет стоять перед строкой "set _to _"
  • вы на самом деле имели в виду, что вам нужны только сеансы, в которых «установите _на _TRUE», как написано в вопросе (, которому вы противоречили в комментарии)

Если вам нужно обрабатывать несколько открытых сеансов одновременно (непонятно ), вы можете сделать что-то вроде (непроверенного):

perl -ne 'if (m/<timestamp>;<hostname>;(sessionid-[a-z]+);type=(.)/) { $type{$1}=$2 }; if (m/<timestamp>;<hostname>;(sessionid-[a-z]+);set_to_TRUE/) { if ($type{$1} eq "m") { print $1 } }'
0
27.01.2020, 22:03

Теги

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