#bash #if-statement
#bash #оператор if
Вопрос:
Я хочу написать скрипт, который преобразует дробную систему координат в декартову систему координат.
Здесь, во входном файле, у меня есть несколько ненужных разделов, которые я хочу удалить. Чтобы удалить верхний ненужный раздел, я просто использую sed -i '1,7 s/.*//g' geometry.xyz
(первые 7 строк всегда не нужны). Но моя проблема в том, что требуемый мне раздел может измениться в размере. Это выглядит примерно так:
%BLOCK LATTICE_CART
10.000000000000000 0.000000000000000 0.000000000000000
0.000000000000000 10.000000000000000 0.000000000000000
0.000000000000000 0.000000000000000 10.000000000000000
%ENDBLOCK LATTICE_CART
%BLOCK POSITIONS_FRAC
H 0.3242730364399766 -0.5778932059463918 0.4725289033063597
H 0.3242730880505244 -0.4462573476378897 0.3408930320952251
H 0.5269396206127043 -0.6403171603506288 0.3779836353112689
H 0.4391824086567526 -0.6285598118052995 0.5417408894621464
H 0.6929877354648144 -0.5297761432888469 0.4524840992286400
H 0.6466039123419516 -0.6708589950924689 0.5647345854707825
H 0.6049230092979219 -0.4959539583844693 0.6129729324712603
H 0.4279396231283572 -0.3487419832103440 0.5700442724565965
C 0.3622730487068306 -0.4740752814020994 0.4447109742648412
C 0.4762730467994820 -0.4740752814020994 0.4447109742648412
C 0.5142730074557883 -0.5778932235717150 0.4725289080290508
C 0.6146969322498489 -0.5686205772550322 0.5256801349609578
O 0.5142730074557883 -0.3980752729966930 0.5207109826702476
%ENDBLOCK POSITIONS_FRAC
%BLOCK KPOINTS_LIST
0.0000000000000000 0.0000000000000000 0.0000000000000000 1.000000000000000
%ENDBLOCK KPOINTS_LIST
%BLOCK CELL_CONSTRAINTS
1 2 3
4 5 6
%ENDBLOCK CELL_CONSTRAINTS
FIX_COM : false
%BLOCK IONIC_CONSTRAINTS
%ENDBLOCK IONIC_CONSTRAINTS
Теперь в моей системе может быть больше водорода, кислорода или углерода. Итак, я хочу, чтобы скрипт нашел% и удалил все после этого. Возможно ли это?
Спасибо
Комментарии:
1. Это, безусловно, возможно, но SO не является бесплатной сделкой по написанию моего кода. Если у вас возникли какие-либо особые трудности с кодом, который вы пишете, отредактируйте свой вопрос, включив его, и люди здесь будут рады помочь. В противном случае попробуйте и покажите признаки усилий. Спасибо.
2. Вы начали с описания того, что вы хотели, затем вы начали говорить о дополнительном кислороде, не сказав, как это может выглядеть в ваших данных! И затем вы хотите удалить все после знака процента, когда ваши данные заполнены знаками процента! Пожалуйста, покажите ваш ожидаемый результат, чтобы мы могли понять.
Ответ №1:
awk '/%ENDBLOCK POSITIONS_FRAC/{ exit }; p; /%BLOCK POSITIONS_FRAC/{p = 1};' geometry.xyz
Дало бы
H 0.3242730364399766 -0.5778932059463918 0.4725289033063597
H 0.3242730880505244 -0.4462573476378897 0.3408930320952251
H 0.5269396206127043 -0.6403171603506288 0.3779836353112689
H 0.4391824086567526 -0.6285598118052995 0.5417408894621464
H 0.6929877354648144 -0.5297761432888469 0.4524840992286400
H 0.6466039123419516 -0.6708589950924689 0.5647345854707825
H 0.6049230092979219 -0.4959539583844693 0.6129729324712603
H 0.4279396231283572 -0.3487419832103440 0.5700442724565965
C 0.3622730487068306 -0.4740752814020994 0.4447109742648412
C 0.4762730467994820 -0.4740752814020994 0.4447109742648412
C 0.5142730074557883 -0.5778932235717150 0.4725289080290508
C 0.6146969322498489 -0.5686205772550322 0.5256801349609578
O 0.5142730074557883 -0.3980752729966930 0.5207109826702476