У меня есть файл .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
Первая и третья строки содержат одинаковые числа, поэтому их нужно отфильтровать.
Цель состоит в том, чтобы вы добавили в свой вопрос некоторый собственный код, чтобы показать, по крайней мере, исследовательские усилия, которые вы предприняли, чтобы решить эту проблему самостоятельно.
Это непонятно. Под «фильтратом» вы подразумеваете исключить всю строку? Как выглядят ваши данные, можете ли вы редактировать включить в свой вопрос пример с 4-5 строками? Исключение последующих строк с тем же номером напрямую невозможно с grep (хотя я полагаю, что, возможно, ваш профессор хочет grep -Eo '[0-9]+' file | grep -Fvwf - file, хотя эта точная команда исключает все вхождения, а не только повторы), но очень простой пример из учебника с Awk.
Мы еще не узнали об Awk. И да, исключить целые строки. Оставляйте только строки с уникальными номерами
Ваш профессор хочет, чтобы вы применили обратные ссылки; погуглите это. Вероятно, они также хотят, чтобы вы решали эту проблему самостоятельно, поскольку именно так вы учитесь. До сих пор не ясно, имеете ли вы в виду тот же цифра или ту же последовательность цифр, разделенных пробелами - 21 12 - это пример повторяющихся "чисел"? Кроме того, все ваши примеры содержат смежные дубликаты - является ли 6 1 6 примером повторяющихся номеров?
Я имею в виду одну и ту же цифру ... Вот почему я назвал их числами ... так что 21 12 - разные числа, поэтому эта строка должна остаться. Строку 6 1 6 следует исключить, потому что 2 одинаковых числа находятся в одной строке. А теперь о том, почему я спрашиваю. У нас есть эта тема 2 недели, и мы изучаем только базовые вещи. Такие команды, как cd, ls head, tail. сортировать, объединять, вставлять и вырезать. И я потратил более 3 часов на то, чтобы погуглить об этом. И я не могу найти никакого решения, как это решить. Теперь я изучаю awk, потому что думаю, что это единственное решение на данный момент. Но все же я не знаю, что нужно указывать, потому что я никогда раньше не использовал awk.
Если вы можете использовать что-то другое, кроме grep, посмотрите uniq
uniq сравнивает строки .. Мне нужно сравнить каждое число в строке ..
@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
Я думаю, вы не хотите удалять 1 12 из 12 23.





Это должно работать для вашего примера:
grep -v "\([0-9]\).*\1" myfile
Идея состоит в том, чтобы поймать любой однозначный [0-9] и сохранить его \(\) и найти существующий такой же шаблон \1 в той же строке. Вы можете легко расширить любое слово, состоящее из цифр.
И 11, и 1 12 удаляются. Я не уверен в требованиях.
@WalterA Да, спецификация не ясна, но OP теперь сможет копать дальше по этому поводу
С заданным вводом вы можете использовать
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
Пожалуйста, добавьте образец ввода и желаемый результат для этого образца ввода к вашему вопросу.