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


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

Автор Тема: Вывод заданного количества совпадений  (Прочитано 1350 раз)

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

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Здравствуйте.

Есть два файла. Нахожу во втором совпадающие строки из первого.
Код: (txt) [Выделить]
grep -f file1 file2 > file3во втором файле совпадений может быть одно, а может быть и сто.
Как ограничить запись в file3 количества совпадений, например, 5 строками?

Т.е. совпадение есть, совпало 50 строк, но нужно записать только 5.
Может искать каким-то другим способом нужно?

Спасибо.

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 626
  • xUbuntu 22.04
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #1 : 07 Октября 2021, 14:17:34 »
Приветствую!

Если упростить задачу до, положим, поиска и удаления дубликатов, то можно, например, сначала сложить оба файла в один, а потом применить команду:

awk -i inplace '!($0 in a) {a[$0];print}' A+B=C.txt
в итоговом файле останутся только уникальные строки, т.е. дубликаты будут удалены. При этом порядок строк не изменится. Если файл очень большой, то работать будет не мгновенно!

Как оставлять именно, скажем, по 5 похожих строк это нужно подумать  :idiot2:

Естественно можно удалять дубликаты из каждого файла по отдельности, если это поможет, в общем пробуйте…

2021 Oct 07; 07:17 AM
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6166
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #2 : 07 Октября 2021, 14:25:15 »
Как ограничить запись в file3 количества совпадений, например, 5 строками?
попробуйте так:
grep -f file1 file2 | head -n5 > file3

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #3 : 07 Октября 2021, 16:50:17 »
БТР, так просто обрезает количество строк в выдаче.
Становится без разницы количество совпадений, выдает 5 строк и всё.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #4 : 07 Октября 2021, 19:42:02 »
Как ограничить запись в file3 количества совпадений, например, 5 строками?
выдает 5 строк и всё.
???
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 626
  • xUbuntu 22.04
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #5 : 07 Октября 2021, 21:07:42 »
Ввысь, хотелось бы задачу которую Вы перед собой поставили понять более чётко  :idiot2:

Было бы лучше иметь файлы для примера, если они не секретно-конфиденциальные, а если нельзя «родные» файлы показать, то составьте два файла для примера…

2021-10-07 14:07:38
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #6 : 07 Октября 2021, 21:44:56 »
ALiEN175,

Ищем совпадения, всех совпадений по 16 штук, выхлоп сократил и посчитал чтоб простыни не было.
Код: (txt) [Выделить]
grep -f file1 file2 | /usr/bin/sort | /usr/bin/uniq -c
(Нажмите, чтобы показать/скрыть)

Пытаемся сделать head -n5
Код: (txt) [Выделить]
grep -f file1 file2 | head -n5| /usr/bin/sort | /usr/bin/uniq -c
(Нажмите, чтобы показать/скрыть)

и тут мы теряем 78 и 91.


Я хочу получить не 16 строк при совпадении, а только 5.
Т.е.
если число 91 встретилось в file2 16 раз, то мне нужны 5 строк об этом,
если число 89 встретилось в file2 16 раз, то мне нужны 5 строк об этом,
если число 67 встретилось в file2 16 раз, то мне нужны 5 строк об этом и т.д.

Если я использую head -n5, то я получаю всего 5 строк.

     



Пользователь добавил сообщение 07 Октября 2021, 21:45:59:
qpdb, да, я тоже так подумал, в голове все складно, а толково объяснить не  получается)
« Последнее редактирование: 07 Октября 2021, 22:12:21 от Ввысь »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #7 : 07 Октября 2021, 22:04:48 »
если число 91 встретилось в file2 16 раз, то мне нужны 5 строк об этом,
Почему одной не хватит?
А если 17 раз? Сколько строк нужно? А если 177 раз?

Пользователь добавил сообщение 07 Октября 2021, 22:07:10:
PS - спойлеры содержимого file1 и file2 уберите - они у вас продублированы во вложении.
« Последнее редактирование: 07 Октября 2021, 22:07:10 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #8 : 07 Октября 2021, 22:10:56 »
ALiEN175, пишутся строки в разные дни, в строках есть информация о дате, хотелось бы 5, просто мне для наглядности.
Если 17 раз, то нужно 5 записать, и если 177 то тоже 5 записываем.

Сейчас поправлю.
« Последнее редактирование: 07 Октября 2021, 22:13:25 от Ввысь »

Оффлайн valrust

  • Активист
  • *
  • Сообщений: 364
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #9 : 07 Октября 2021, 22:26:28 »
А если так попробовать
xargs -n 1 -a file1.txt -I {} grep -m 5 {} file2.txt > file3.txt

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #10 : 07 Октября 2021, 22:26:46 »
Как вариант:
grep -f file1.txt file2.txt | sort | uniq -c

     16 23
     16 44
     16 67
     16 78
     16 89
     16 91
Первый столбик - количество вхождений.
Второй столбик - содержимое строки.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Вывод заданного количества совпадений
« Ответ #11 : 07 Октября 2021, 22:45:55 »
ALiEN175, если этот вариант использовать, то придется что-то дальше придумывать.
valrust, да, это оно) Спасибо огромное.

Спасибо всем кто откликнулся.

 

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