Используя 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
порядок, не гарантируемый.
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
для перехода к следующему / предыдущему).
Основываясь на ответе Ориона , 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}} не будет отображаться , но не .
За последние несколько месяцев я влюбился в 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 по оператору |
скудна, но я думаю, что она применяется только к терминам непосредственно перед и после, что фактически означает, что ИЛИ имеет приоритет над И (, который неявный ; по умолчанию все термины объединяются по И -). Но в большинстве случаев это не должно быть проблемой, и, по моему опыту, все работает нормально.
Попробуйте. Я обнаружил, что это удивительно полезно, когда дело доходит до просмотра вещей, когда я не совсем уверен, что ищу, и когда контекст не имеет значения.