Этот скрипт, который вы написали, лучше сделать с помощью gnu parallel или сделать с опцией -j. В качестве альтернативы вы можете повторно -написать его на python (или другом языке ).
Посмотрите на
parallel
:Инструмент для использования в bash (самый простой из трех для изучения, делает только одну вещь ). make
:Немного более продвинутый, и у него есть собственный язык. Он используется для создания файлов. например. чтобы сделать A.b
, вам понадобятся A.a
и g.f
, когда они у вас есть, сделайте z;y;z
. Вы также можете добавить правила создания A.a
и g.f
. Будет отрабатывать, что от чего зависит, и строить вещи в правильном порядке. Если это возможно, он будет делать что-то параллельно (, если его попросят ). python
:Язык программирования, он может делать то, что пытается сделать ваш скрипт, он может делать то, что делает Matlab. Вам также придется подумать, какие из них могут быть установлены -. Сделайте это, чтобы узнать:
type parallel
type make
type python
Заметка:type
вам не инструкция, печатать. Это команда, которую вы вводите. Он сообщает вам тип каждой команды (, где он ).
Предполагая, что все, что вам нужно, это найти совпадения в строках с 200 по 250 текстового файла, но начиная с 250 и до 200, простым решением будет tac
файл, который просто печатает в обратном порядке. Затем вы можете использовать grep -n
для поиска вашего шаблона и распечатать номер строки и небольшой скрипт Perl, чтобы изменить номер строки на правильный в исходном файле. Что-то вроде этого:
sed -n '200,250p' file | tac | grep -n "$pattern" | perl -pe 's/(^\d+)/251-$1/e'
Если мы создадим тестовый файл с:
printf 'Line number %d\n' {1..400} > file
А затем используйте 21
в качестве шаблона, мы должны получить строки с 210 по 219 и 221:
$ sed -n '200,250p' file | tac | grep -n 21 | perl -pe 's/(^\d+)/251-$1/e'
221:Line number 221
219:Line number 219
218:Line number 218
217:Line number 217
216:Line number 216
215:Line number 215
214:Line number 214
213:Line number 213
212:Line number 212
211:Line number 211
210:Line number 210