2014-06-19 2 views
0

У меня есть терминальная программа Redhat Linux, которая использует следующую команду: Программа файл_ввода выходной_файлазапуска исполняемого файл на все файлы в каталоге и получить различные выходные файлы, соответствующие исходные файлы

файл_ввода этого имени файла что я хочу, чтобы измененный и outputfile был именем выходного файла.

Мне нужна команда ac shell, которая может запускать программу для всех файлов в том же каталоге (001p.pdb полностью до 361p.pdb) и создавать выходные файлы с именами 001h.pdb, 002h.pdb .. . 361h.pdb

+0

Удачи! Когда вы застряли и у вас есть код, чтобы показать нам, пожалуйста, обновите свой вопрос, и мы с радостью поможем. Прямо сейчас, боюсь, вы не получите никаких ответов, не проявив при этом никаких усилий. –

ответ

0

Использование ш в качестве суб-оболочки в следующих вместо CSH, вероятно, будет быстрее, но ниже код будет работать в любой оболочке:

find . -maxdepth 1 -regex '\./[0-9][0-9][0-9]p\.pdb' | xargs -I _IN_ csh -c 'program _IN_ `echo _IN_ | sed -e s/p/h/`' 

Предположение о том, что файлы находятся в текущий рабочий каталог, но команда может быть легко расширена, чтобы заботиться о произвольных каталогах.

+0

У меня также есть файлы с символами (заглавные буквы, цифры, подчеркивание) с расширением pdb. Если я хочу, чтобы на выходе было только h перед расширением (pdb), как мне изменить этот код? Я бы подумал, что вы будете делать $ \ .pdb '| xargs ..... это правильно? – Josh

+0

Как насчет того, что мы просто говорим -regex '[^ h] \ .pdb'? это работает для вас? –

+0

Or -regex '[^ h] [.] Pdb'? Ввод. в скобках побиты против CSH, тянущие \ (У меня никогда не было отличной справки по правилам спасения CSH ...) –