Я не знаком с spacecmd
, но вы можете использовать модуль wait_for
для мониторинга PID.
Из документов:
- name: Wait until the process is finished and PID was destroyed
wait_for:
path: /proc/3466/status
state: absent
Я предлагаю другое решение с комбинацией sed
иgrep
:
$ grep '^Running\|Initial' screen2.dat | sed -e 'N;s/\n\|,/ /g' -e 's/[^0-9. ]\+\|^[^0-9]\+//g'
0 7.338690864048985 28.51815509409351 11.795143979909135
1 10.599326804010953 7.514871863851674 14.843070346933654
grep
извлечет только те строки, которые начинаются с «Выполняется» и «Начальный».
Running ep. 0
Initial position for this ep is 7.338690864048985,28.51815509409351,11.795143979909135
Running ep. 1
Initial position for this ep is 10.599326804010953,7.514871863851674,14.843070346933654
sed -e 'N;s/\n\|,/ /g'
заменит символы новой строки и запятые на пробел
Running ep. 0 Initial position for this ep is 7.338690864048985 28.51815509409351 11.795143979909135
Running ep. 1 Initial position for this ep is 10.599326804010953 7.514871863851674 14.843070346933654
Наконец, 's/[^0-9. ]\+\|^[^0-9]\+//g
заменит все, что не является цифрой, точкой или пробелом или цифрой в начале строки
0 7.338690864048985 28.51815509409351 11.795143979909135
1 10.599326804010953 7.514871863851674 14.843070346933654
Использование любого awk в любой оболочке на каждом компьютере Unix:
$ awk '/Running ep/{ep=$NF} /Initial position/{print ep, $NF}' file
0 7.338690864048985,28.51815509409351,11.795143979909135
1 10.599326804010953,7.514871863851674,14.843070346933654
и если вы действительно хотите заменить эти запятые пробелами, тогда:
$ awk '/Running ep/{ep=$NF} /Initial position/{gsub(/,/," ",$NF); print ep, $NF}' file
0 7.338690864048985 28.51815509409351 11.795143979909135
1 10.599326804010953 7.514871863851674 14.843070346933654
Использование Raku (, ранее известного как Perl _6)
raku -ne 'if m/^^"Running ep. " $<ind> = [\d+] $$/ fff m/^^"Initial position for this ep is " $<val> = [.+] $$/ -> { ($<ind> || $<val> // "").split(",") andthen (.put if.chars) };'
ИЛИ
raku -ne '($<ind> || $<val> // "").split(",") andthen (.put if.chars) if m/^^"Running ep. " $<ind> = [\d+] $$/ fff m/^^"Initial position for this ep is " $<val> = [.+] $$/;'
Пример ввода:
Running ep. 0
...IMPORTANT...
Initial position for this ep is 7.338690864048985,28.51815509409351,11.795143979909135
...DISCARD...
...DISCARD...
...DISCARD...
Running ep. 1
...IMPORTANT...
Initial position for this ep is 10.599326804010953,7.514871863851674,14.843070346933654
...DISCARD...
Пример вывода (любой код выше):
0
7.338690864048985 28.51815509409351 11.795143979909135
1
10.599326804010953 7.514871863851674 14.843070346933654
Публикация этого, потому что OP запросил «что-то вроде» pattern1/pattern2, возвращающегося в той же строке, что предполагает, что возврат одной строки -не является абсолютным требованием.
Вкратце, оператор Раку fff
используется --, но только для возврата двух именованных -захватов. В общем, оператор Раку fff
флип -захватывает текст между двумя «сторожевыми» регулярными выражениями (, включая совпадения регулярных выражений, если это необходимо ). Скелетная версия кода fff
— .say if m/OPEN/ fff m/CLOSE/;
. Это означает, что при оценке Sample Input секции с неважными строками ...DISCARD...
отбрасываются.
Приведенный выше код считывает ввод -ne
построчно, что позволяет эффективно использовать память -.Он использует$<ind>
(индекс )и$<val>
(значение )именованные захваты. В коде также используется ||
короткое -замыкание OR
, а также оператор Раку //
«определено -ИЛИ», который возвращает правую часть, если левая часть не определена(Nil
).
Хорошее вращение быстро меняет код с возврата только захватов (выше )на возврат парных захватов с промежуточными строками . Для второго примера строки кода вверху просто поместите код «named -regex+split» перед (.put if.chars)
или запустите очень упрощенный код ниже:
raku -ne '.say if m/^Running/ fff m/^Initial/;'
Пример вывода (захват промежуточного текста):
Running ep. 0
...IMPORTANT...
Initial position for this ep is 7.338690864048985,28.51815509409351,11.795143979909135
Running ep. 1
...IMPORTANT...
Initial position for this ep is 10.599326804010953,7.514871863851674,14.843070346933654
https://docs.raku.org/routine/$СОЛИДУС$СОЛИДУС
https://raku.org