У меня есть файл, содержащий строки, разделенные запятыми. Строки могут содержать точки (т.е. не только буквенно-цифровые символы). Вот пример:
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
решение1
Вы можете попробовать это awk
:
awk -F, '$2=="Level1.2" && NF==2' myfile.txt
Разделитель ввода установлен на ,
. Команда выводит строки, содержащие 2 поля, второе из которых содержит соответствующую строку.
решение2
Следующие работы:
grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'
При этом пропускается первое поле и его конечная запятая, затем выполняется поиск совпадения с Level1.2
; затем результат фильтруется путем игнорирования всех записей с последующим значением Level
(ни одна запись Level
в первом поле не будет иметь предшествующей запятой).
Я предположил, что другой текст может быть добавлен к Level1.2
, при условии, что он не содержит Level
строку. Если это не так, то вы можете использовать более простой вариант:
grep '^[^,]*,Level1\.2$' myfile.txt