Получите уникальные строки из журнала, используя grep и tail

Вложенный файл говорит: VMplayer_3.0.0-203739.x86_64_2.6.38-8.tar.gz (3.1 K) x86 означает 32-битную систему ASFAIK. Поэтому вы можете попробовать с этим файлом. Другой вариант - запустить более старое ядро. Я обычно стараюсь со стабильными выпусками отсюда: Mainline kernel downloads BTW, я не вижу 2.6.38-8 ядра там, это версия rc8? Я надеюсь, что хотя бы часть этой информации поможет

1
задан 18 April 2016 в 17:22

1 ответ

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

$ cat foo.txt 
foo
foo
foo
bar
baz
baz
foo
foo
$ uniq foo.txt 
foo
bar
baz
foo

Чтобы удалить все повторяющиеся строки, даже не последовательные, его можно запустить после sort:

$ sort foo.txt | uniq
bar
baz
foo

Некоторые флаги могут использоваться, чтобы рассматривать только одну часть строки при определении дубликатов. Здесь мы хотим рассмотреть только IP-адреса, которые находятся в четвертом столбце, поэтому сначала нам нужно сказать uniq игнорировать первые три столбца, это делается с помощью флага -f. И после этого нам нужно сказать, что нужно учитывать только IP-адреса. Это может быть сложно, потому что мы можем только сказать, что оно учитывает фиксированное количество символов (с флагом -w), но IP-адреса могут быть разными по длине. К счастью, здесь это не проблема, потому что IP-адреса всегда сопровождаются requested, поэтому, даже если первые несколько символов этого слова включены в сравнение, это не повлияет на правильность определения строки в виде дубликата. В конце концов, применение uniq -f 3 - w 15 к входу, по-видимому, приводит к желаемому результату.

Еще одна вещь, которую следует отметить: когда мы рассматриваем только одну часть строк в обнаружении дубликатов, все строки в группа «дубликатов» не обязательно должна быть полностью идентичной, и поэтому мы должны решить, какой из них будет напечатан на выходе. uniq печатает первый, но может быть сделан для печати последнего, сначала выполнив вход через tac.

0
ответ дан 23 May 2018 в 12:06
  • 1
    есть ли способ использовать grep для игнорирования строк с помощью 141.8. .. содержащиеся в них, но получить линии, которые имеют GET? Прямо сейчас у меня есть это, но я должен что-то делать неправильно sudo grep -v '^141.8.83.213' && "GET" /home/tsec/prototype/logs/glastopf.log | sort -k4,4 | tac | sort -uk4,4 | sort -k1,2 | tail -n 10 > /home/tsec/prototype/logs/ext$ – firepro20 21 April 2016 в 02:47
  • 2
    @ firepro20 Это другой вопрос, поэтому, пожалуйста, спросите его отдельно. – fkraiem 21 April 2016 в 02:50
  • 3
    Извини, я виноват !! – firepro20 21 April 2016 в 02:56

Другие вопросы по тегам:

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