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