У меня есть файл, который содержит строки, разделенные запятыми. Строки могут содержать точки (то есть не только буквенно-цифровые символы). Это пример:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

Мне нужно выполнить поиск по именам сайтов (обратите внимание, что у меня нет определенного формата для имени сайта, т. Е. Он не всегда заканчивается на .com, поэтому я не должен учитывать, как выглядит первый столбец)

Мне нужны сайты, которые ТОЛЬКО содержат конкретную строку. В этом примере исключительно Level1.2 (без Level1.1, Level1.0 и Level3 ни до, ни после). Затем напечатайте результат в новом файле, который соответствует условию (содержит только Level1.2). Таким образом, ключевые слова поиска начинаются со второго столбца (я не хочу, чтобы результат поиска находил соответствующий шаблон в названии сайта).

Так что, если я ищу Level1.2, новый файл должен содержать:

site1.com,Level1.2
site3.com,Level1.2

Но результат моей команды:

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

Если есть сайт, который содержит Level1.2 в своем названии, он не должен учитываться, так как мне нет дела до первого столбца.

Я попробовал эту команду, и она работает для меня. Единственное, что мне нужно, чтобы поиск игнорировал появление строки поиска в первом столбце.

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

2 ответа2

0

Вы можете попробовать это awk:

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

Входной разделитель установлен в положение , Команда печатает строки, содержащие 2 поля со вторым, имеющим соответствующую строку.

0

Следующие работы:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

Это пропускает первое поле и его запятую, а затем ищет совпадение с Level1.2 ; затем результат фильтруется путем игнорирования всех записей с последующим Level (любой Level в первом поле не будет иметь предшествующей запятой).

Я предположил, что другой текст может быть добавлен к Level1.2 , если он не содержит строку Level . Если это не так, то вы можете использовать более простое:

grep '^[^,]*,Level1\.2$' myfile.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .