grep в меньше?

Используя awk

awk -F, '
    NR == FNR {n[$2] = $1; next}
    {n[$2] -= $1}
    END {for (k in n) if (n[k] != 0) printf " %2d  %s\n",n[k],k}
' top1 top2

выводы

 -1  amazon.com
  1  qq.com
 -1  wikipedia.org
  1  baidu.com

порядок, не гарантируемый.

62
02.09.2015, 12:45
3 ответа

less имеет очень мощное сопоставление с образцом. Из справочной страницы :

& шаблон

    Отображать только строки, соответствующие шаблону ; строки, которые не соответствуют шаблон не отображается. Если шаблон пуст (если вы наберете & , сразу за которым следует ENTER ), любая фильтрация будет отключена, и отображаются все строки. Пока действует фильтрация, в начале подсказки отображается амперсанд как напоминание о том, что некоторые строки в файле могут быть скрыты.

    Некоторые символы являются специальными, например, в команде / :

    ^ N или !

      Отображать только строки, НЕ соответствующие шаблону .
    ^ R
      Не интерпретируйте метасимволы регулярных выражений, то есть проводите простое текстовое сравнение.

    ____________
    Некоторые символы являются специальными , если вводятся в начале шаблона ; они изменяют тип поиска {{1} } вместо того, чтобы стать частью шаблона .

(Конечно, ^ N и ^ R представляют Ctrl ] + N и Ctrl + R , соответственно.)

Так, например, & dns будет отображать только строки, соответствующие шаблону dns , и &! dns отфильтровывают (исключают) эти строки, отображая только строки, которые не t соответствовать шаблону.

В описании команды / отмечается, что

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

Таким образом,

  • & eth [01] отобразит строки, содержащие eth0 или eth1
  • & arp. * Eth0 отобразит строки, содержащие arp ], за которым следует eth0
  • & arp | dns , отобразятся строки, содержащие arp или dns

И ! может инвертировать любое из вышеперечисленного. Итак, команда, которую вы хотели бы использовать для примера в своем вопросе, следующая:

&!event text|something else|the other thing|foo|bar

Также используйте / шаблон и ? шаблон , чтобы поиск (и n / N для перехода к следующему / предыдущему).

97
27.01.2020, 19:32

Основываясь на ответе Ориона , less (1) справочная страница описывает

/ шаблон

    Поиск вперед в файле N -й строки , содержащей шаблон . N по умолчанию 1. Шаблон является регулярным выражением, как распознается библиотека регулярных выражений, предоставляемая вашей системой. Поиск начинается со второй отображаемой строки (но см. Параметры -a и -j , которые меняют это). {{1} }

    Некоторые символы являются специальными , если вводятся в начале шаблона ; они скорее изменяют тип поиска чем стать частью шаблона :

    ^ N или !

      Искать строки, которые НЕ соответствуют шаблону .
    ^ E или *
      Поиск нескольких файлов. То есть, если поиск достигает КОНЕЦ текущего файла , не находя совпадения, поиск продолжается в следующем файле в списке командной строки.
    ^ F или @
      Начните поиск с первой строки ПЕРВОГО файла в списке командной строки, независимо от того, что в данный момент отображается на экран или настройки параметров -a или -j .
    ^ K
      Выделите любой текст , который соответствует шаблону на текущем экране, , но не переходите к первому совпадению (СОХРАНИТЬ текущую позицию) .
    ^ R
      Не интерпретируйте метасимволы регулярных выражений, то есть проводите простое текстовое сравнение.

    ____________
    Командам может предшествовать десятичное число, называемое N в описании…

(Конечно ] ^ N и ^ E и т. Д. Представляют собой Ctrl + N и Ctrl + E и т. Д.)

Оказывается, что паттерн и и / паттерн хорошо работают вместе. Например, команды

  • &! Arp | dns Введите
  • / Ctrl + K fail | fatal | fault | sd [az ] [0-9] Введите

в любом порядке, чтобы скрыть (исключить) все строки , содержащие arp или dns (например, ] grep -v ), а затем в оставшихся строках выделите все вхождения fail , fatal , fault , или что-нибудь похожее на имя устройства SCSI ( sd [az] [0-9] ). Обратите внимание, что строки, содержащие arp или dns , , а также не содержат или любые другие опасные слова, {{ 1}} не будет отображаться , но не .

7
27.01.2020, 19:32

За последние несколько месяцев я влюбился в fzf.

В вашем случае пока контекст не нужен(т.е. эквивалент grep'а -A, -Bили -Cне нужен, и, кстати, less'а &также имеет такое же ограничение ), тогда fzf — очень мощный инструмент.

Вот глупый пример:

printf "%s\n" {aa,bb,cc}{dd,ee,ff}{gg,hh,ii} | fzf

Если вы запустите это и поиграете с такими входными данными, как aa | bb dd | ee !gg !hhи т. д., вы быстро увидите, что происходит.

Документация Fzf по оператору |скудна, но я думаю, что она применяется только к терминам непосредственно перед и после, что фактически означает, что ИЛИ имеет приоритет над И (, который неявный ; по умолчанию все термины объединяются по И -). Но в большинстве случаев это не должно быть проблемой, и, по моему опыту, все работает нормально.

Попробуйте. Я обнаружил, что это удивительно полезно, когда дело доходит до просмотра вещей, когда я не совсем уверен, что ищу, и когда контекст не имеет значения.

2
27.01.2020, 19:32

Теги

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