Я записал сценарий Bash, чтобы выбрать только число в этой фразе (ниже) и скопировать его в файл.
siesta: Total = -29.649928
Вот мое решение (по крайней мере, импровизированное решение):
grep 'Total =' h2.$i.out >> data.dat
sed -i -e "s/"siesta:"/$i/g" "data.dat"
sed -i -e "s/"Total"//g" "data.dat"
sed -i -e "s/"="//g" "data.dat"
У Вас есть какие-либо рекомендации?
Можно сделать это в одной строке:
grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
Объяснение:
-P
Используйте совместимый с Perl regex (PCRE), который поддерживает намного более усовершенствованное сопоставление с образцом-o
Распечатайте только соответствие части строки (в этом случае, просто число)\K
Не рассматривайте предыдущее как часть соответствия (Это - функция PCRE.).*
Нуль соответствия или больше любого символа (кроме новой строки)Распечатать $i
в файл в той же строке как вывод grep, выполненный printf '%s' "$i" >> data.dat
перед командой grep. Я предполагаю, что Вы выполняете его в цикле, так, чтобы работал бы как это:
for i in ...; do
printf '%s' "$i" >> data.dat
grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
done