#awk #notepad #notepad
#awk #notepad #блокнот
Вопрос:
У меня есть большой (2 Гб) текстовый файл со следующей структурой:
-------------------------------------------------------------------------------
176 (comment: line 1)
i = 1 (comment: line 2)
H -0.073307 8.187645 4.065238 (comment: line 3)
H 1.964613 5.187168 7.038084 (comment: line 4)
... (comment: lines 5 - 178)
176 (comment: line 179)
i = 2 (comment: line 180)
H -0.055549 8.224715 4.041477 (comment: line 181)
H 1.971048 5.193901 7.012246 (comment: line 182)
... (comment: lines 183 - 356)
-------------------------------------------------------------------------------
Это результат выполнения программы Molecular Dynamics.
176 — количество атомов, ‘i = n’ — количество итераций, а строки ниже — координаты атомов. Мне нужно написать скрипт для изменения двух первых строк для каждой итерации следующим образом очень большой текст следующим образом:
-------------------------------------------------------------------------------
176 (comment: line 1)
i = 1, time = 0.500, E = -100.0000000000 (comment: line 2)
H -0.073307 8.187645 4.065238 (comment: line 3)
H 1.964613 5.187168 7.038084 (comment: line 4)
... (comment: lines 5 - 178)
176 (comment: line 179)
i = 2, time = 1.000, E = -100.0000000000 (comment: line 2)
H -0.055549 8.224715 4.041477 (comment: line 181)
H 1.971048 5.193901 7.012246 (comment: line 182)
(comment: lines 183 - 356)
-------------------------------------------------------------------------------
Это означает, что для итерации i = n требуется время = 0,500 * n и энергия (здесь нужно указать константу, -100,0000000000), так что, например.
i = 1000, time = 500.000, E = -100.0000000000
Я знаю, что это тривиально, но я совершенно потерян.
Комментарии:
1. являются ли пустые строки частью выходных данных?
2. После того, как вы вставили код / содержимое, вы можете выбрать его и нажать
{}
кнопку или использовать короткое нажатие на клавиатуреCtrl K
для его форматирования. И, пожалуйста, расскажите нам, что вы пробовали, важно продемонстрировать ваши собственные усилия, чтобы получить хорошие ответы.3. В выходных данных нет пустых строк, извините, я никогда не использовал stack overflow…
4. Действительно ли
----
строки присутствуют в вашем входном файле? Если нет, то удалите их из вашего примера.
Ответ №1:
$ awk 'match($0,/^[[:space:]] i =[[:space:]] [0-9] /) {
$0 = sprintf("%s, time = %0.3f, E = -100.0000000000%s", substr($0,1,RLENGTH), 0.5 * ( n), substr($0,RLENGTH 1))
} 1' file
-------------------------------------------------------------------------------
176 (comment: line 1)
i = 1, time = 0.500, E = -100.0000000000 (comment: line 2)
H -0.073307 8.187645 4.065238 (comment: line 3)
H 1.964613 5.187168 7.038084 (comment: line 4)
... (comment: lines 5 - 178)
176 (comment: line 179)
i = 2, time = 1.000, E = -100.0000000000 (comment: line 180)
H -0.055549 8.224715 4.041477 (comment: line 181)
H 1.971048 5.193901 7.012246 (comment: line 182)
... (comment: lines 183 - 356)
-------------------------------------------------------------------------------