Grep: удалить строки с одинаковым номером дважды

У меня есть файл .txt, и в каждой строке указано количество цифр. Что мне нужно, так это отфильтровать их, которые не содержат одинакового числа. Поэтому я хочу, чтобы на выходе были только строки, у которых все числа разные. Я должен использовать команду grep!

Пример:

File_input:

1 1 2 3 4 5

1 2 3 4 5 6

6 6 6 6 6 6

Что я хочу

File_output:

1 2 3 4 5 6

Первая и третья строки содержат одинаковые числа, поэтому их нужно отфильтровать.

Пожалуйста, добавьте образец ввода и желаемый результат для этого образца ввода к вашему вопросу.

Cyrus 11.03.2018 15:04

Цель состоит в том, чтобы вы добавили в свой вопрос некоторый собственный код, чтобы показать, по крайней мере, исследовательские усилия, которые вы предприняли, чтобы решить эту проблему самостоятельно.

Cyrus 11.03.2018 15:06

Это непонятно. Под «фильтратом» вы подразумеваете исключить всю строку? Как выглядят ваши данные, можете ли вы редактировать включить в свой вопрос пример с 4-5 строками? Исключение последующих строк с тем же номером напрямую невозможно с grep (хотя я полагаю, что, возможно, ваш профессор хочет grep -Eo '[0-9]+' file | grep -Fvwf - file, хотя эта точная команда исключает все вхождения, а не только повторы), но очень простой пример из учебника с Awk.

tripleee 11.03.2018 15:06

Мы еще не узнали об Awk. И да, исключить целые строки. Оставляйте только строки с уникальными номерами

WoWce 11.03.2018 15:11

Ваш профессор хочет, чтобы вы применили обратные ссылки; погуглите это. Вероятно, они также хотят, чтобы вы решали эту проблему самостоятельно, поскольку именно так вы учитесь. До сих пор не ясно, имеете ли вы в виду тот же цифра или ту же последовательность цифр, разделенных пробелами - 21 12 - это пример повторяющихся "чисел"? Кроме того, все ваши примеры содержат смежные дубликаты - является ли 6 1 6 примером повторяющихся номеров?

tripleee 11.03.2018 16:14

Я имею в виду одну и ту же цифру ... Вот почему я назвал их числами ... так что 21 12 - разные числа, поэтому эта строка должна остаться. Строку 6 1 6 следует исключить, потому что 2 одинаковых числа находятся в одной строке. А теперь о том, почему я спрашиваю. У нас есть эта тема 2 недели, и мы изучаем только базовые вещи. Такие команды, как cd, ls head, tail. сортировать, объединять, вставлять и вырезать. И я потратил более 3 часов на то, чтобы погуглить об этом. И я не могу найти никакого решения, как это решить. Теперь я изучаю awk, потому что думаю, что это единственное решение на данный момент. Но все же я не знаю, что нужно указывать, потому что я никогда раньше не использовал awk.

WoWce 11.03.2018 16:26

Если вы можете использовать что-то другое, кроме grep, посмотрите uniq

Nic3500 11.03.2018 17:22

uniq сравнивает строки .. Мне нужно сравнить каждое число в строке ..

WoWce 11.03.2018 17:26

@tripleee Через несколько часов я придумал это грязное решение ... Вот оно: cat numbers.txt | grep "1.*1" -v | grep "2.*2" -v | grep "3.*3" -v | grep "4.*4" -v | grep "5.*5" -v | grep "6.*6" -v | grep "7.*7" -v | grep "8.*8" -v | grep "9.*9" -v | grep "0.*0" -v

WoWce 11.03.2018 17:48

Я думаю, вы не хотите удалять 1 12 из 12 23.

Walter A 11.03.2018 22:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
10
171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это должно работать для вашего примера:

grep -v "\([0-9]\).*\1" myfile

Идея состоит в том, чтобы поймать любой однозначный [0-9] и сохранить его \(\) и найти существующий такой же шаблон \1 в той же строке. Вы можете легко расширить любое слово, состоящее из цифр.

И 11, и 1 12 удаляются. Я не уверен в требованиях.

Walter A 11.03.2018 22:15

@WalterA Да, спецификация не ясна, но OP теперь сможет копать дальше по этому поводу

Jean-Baptiste Yunès 12.03.2018 09:23

С заданным вводом вы можете использовать

sed -r '/([0-9]+).+\1/d' File_input

У вас будут проблемы с подстроками: 1 соответствует 12 и 12 соответствует 1.
вы можете добавить границы слов \b с помощью

sed -r '/\b([0-9]+)\b.*\b\1\b/d' File_input

Другие вопросы по теме