Я провел много времени, ища существующий вопрос о моей проблеме, но мне не удалось найти любое решение для этого случая в определенном. Я приношу извинения заранее, если бы существует существующий поток/вопрос, решая его и ценил бы, если кто-либо мог бы указать на меня вперед.
Я должен искать шаблон (например, "ГЕН") среди многочисленных файлов в системе передачи и обработки данных. Однако набор данных называют следующим образом:
foo_1549474392_93.nwk
foo_1549474392_93.ort.final.nwk
foo_1549474392_93.ort.nwk
foo_1549474392_93.ort_reroot.nwk
Это текстовые файлы для анализа n# 93. Существуют 550 всего. Вещь, я должен найти шаблон только в файлах названным как "foo_1549474392_93.nwk" (т.е.: что-либо + подчеркивает + цифра (цифры) + .nwk, с числами, идущими от 1 до 550, не 001 - 550). Все остальное перед подчеркиванием не важно.
Я уже попробовал это
grep "GENE" *'/d'.nwk
и много изменений с помощью [0-9] и так далее.
Большое спасибо за справку!
Для поиска любого файла, имя которого соответствует чему-либо + подчеркивание + цифры + .nwk, с цифрами, идущими от 1 до 550 и, исключая 001, 551, и т.д., попытка:
shopt -s nullglob; grep GENE *_{1..550}.nwk
Поскольку {1..550}
расширяется до чисел, которые Вы хотите (и только числа, которые Вы хотите), шарик *_{1..550}.nwk
будет включать только файлы, которые Вы хотите. Чтобы гарантировать, что все файлы в расширении на самом деле существуют в каталоге, мы устанавливаем nullglob
с shopt -s nullglob
.
Так как Вы не можете хотеть, чтобы изменение в nullglob влияло на другие команды, может быть полезно использовать parens для помещения команды в подоболочку.
(shopt -s nullglob; grep GENE *_{1..550}.nwk)
Изменение в nullglob влияет только на подоболочку (что в parens), и ничто прежде или после.
Давайте создадим четыре файла с GENE
, два, которые соответствуют Вашим критериям имени файла и два, которые не делают:
$ echo GENE | tee bad_1224_01.nwk bad_3456_551.nwk good_23456_1.nwk good_763456_550.nwk
GENE
$ ls
bad_1224_01.nwk bad_3456_551.nwk good_23456_1.nwk good_763456_550.nwk
Теперь, давайте выполним нашу команду:
$ (shopt -s nullglob; grep GENE *_{1..550}.nwk)
good_23456_1.nwk:GENE
good_763456_550.nwk:GENE
Нежелательные файлы исключены, и хорошие имена найдены.
Для сравнения давайте попробуем:
$ grep "GENE" *[0-9].nwk
bad_1224_01.nwk:GENE
bad_3456_551.nwk:GENE
good_23456_1.nwk:GENE
good_763456_550.nwk:GENE
Это соответствует нежелательным файлам.