Поиск шаблона в обратном порядке в определенном диапазоне и получение номера строки для каждого совпадения с помощью sed

Этот скрипт, который вы написали, лучше сделать с помощью 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вам не инструкция, печатать. Это команда, которую вы вводите. Он сообщает вам тип каждой команды (, где он ).

0
27.05.2020, 13:25
1 ответ

Предполагая, что все, что вам нужно, это найти совпадения в строках с 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
2
18.03.2021, 23:32

Теги

Похожие вопросы