Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Grep как вывести количество совпадений в каждой строке.  (Прочитано 1655 раз)

0 Пользователей и 1 Гость просматривают эту тему.

zse

  • Автор темы
  • Гость
    — Приветствую всех!
    — Grep с ключём „-c“ выводит совпадение вообще.
Код: (bash) [Выделить]
grep -i -E -c "02|11|17|18|22|25|39|03" 2018Jun03221547.txt
27
    — А хотелось бы чтобы в выводе команды типа:
Код: (bash) [Выделить]
grep -i -E  "02|11|17|18|22|25|39|03" 2018Jun03221547.txtнапротив каждой строки было указано количество совпадений…
    — А есть вдруг у кого  готовое решение как получить количество совпадений прострочно?
(Нажмите, чтобы показать/скрыть)
    — Если производится подсветка может есть возможность указать количество „подсвеченных“ позиций напротив каждой строки? Или вряд ли здесь можно обойтись только grep?

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Код: (bash) [Выделить]
perl -ne '$n=grep {/02|11|17|18|22|25|39|03/} split ("", $_); if ($n > 0) {chomp; print "$_ $n\n"}' 2018Jun03221547.txt

zse

  • Автор темы
  • Гость
    — Спасибо, ReNzRv, я perl применяю только в готовых скриптах т.е. методом банального плагиата😞…
    — Всё собираюсь хоть примитивное использование освоить…

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Да незачто)
Только я поспешил, и не нерабочий пример дал.
Вот рабочий:
Код: (bash) [Выделить]
perl -ne '$n=0; $s=$_; chomp $s; s/02|11|17|18|22|25|39|03/$n++/eg; print "$s $n\n" if ($n > 0)' 2018Jun03221547.txt

zse

  • Автор темы
  • Гость
   — Да, работает, благодарю!
(Нажмите, чтобы показать/скрыть)
     — Да, мощная однако штука perl при обработке текста!!!

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Зачем усложнять?
Код: (bash) [Выделить]
while read line ; do
   n=0
   for i in $line ; do
       case $i in
           02|11|17|18|22|25|39|03) ((n++)) ;;
       esac
   done
   echo $n $line
done <2018Jun03221547.txt

Пользователь добавил сообщение 05 Июня 2018, 12:10:20:
Код: (bash) [Выделить]
awk '{print gsub("02|11|17|18|22|25|39|03","&"), $0}' 2018Jun03221547.txt
« Последнее редактирование: 06 Июня 2018, 10:19:07 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
Зачем усложнять?
     — По отношению ко мне данный вопрос звучит практически риторически :)! А вот с уважаемым ReNzRv Вы бы даже очень могли поговорить!😇
     — Спасибо Azure, это пополнит мою коллекцию задач и их решения! После выхода на пенсию мотивация к познания Linux’а заметно снизилась, но тем не менее кое-что я всё же пытаюсь постичь.😈
2018 Jun 05; 06:02 AM

Пользователь добавил сообщение 05 Июня 2018, 13:38:29:
     — В первом примере  может что-то с синтаксисом, не разбирался ещё…
(Нажмите, чтобы показать/скрыть)
переводит на новую строку…
     — Второй пример хорошо работает.
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 05 Июня 2018, 13:38:29 от zse »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
В первом примере  может что-то с синтаксисом
Лишний "<" (исправил)
« Последнее редактирование: 06 Июня 2018, 10:19:32 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
    — Да, спасибо, теперь работает!
(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.1 секунд. Запросов: 24.