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


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

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

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

Онлайн zse

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

Оффлайн ReNzRv

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

Онлайн zse

  • Автор темы
  • Участник
  • *
  • Сообщений: 159
    • Просмотр профиля
    — Спасибо, ReNzRv, я perl применяю только в готовых скриптах т.е. методом банального плагиата😞…
    — Всё собираюсь хоть примитивное использование освоить…

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 1867
    • Просмотр профиля
Да незачто)
Только я поспешил, и не нерабочий пример дал.
Вот рабочий:
Код: Bash
  1. 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
Помощь новичкам, написание скриптов на bash,sh,perl,awk (в ЛС)

Онлайн zse

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

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5486
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Зачем усложнять?
Код: Bash
  1. while read line ; do
  2.    n=0
  3.    for i in $line ; do
  4.        case $i in
  5.            02|11|17|18|22|25|39|03) ((n++)) ;;
  6.        esac
  7.    done
  8.    echo $n $line
  9. done <2018Jun03221547.txt

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

Онлайн zse

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

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

Оффлайн Azure

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

Онлайн zse

  • Автор темы
  • Участник
  • *
  • Сообщений: 159
    • Просмотр профиля
    — Да, спасибо, теперь работает!
(Нажмите, чтобы показать/скрыть)

 

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