【问题标题】:Editing a large text file with awk or any other editor: loop for changing a n-th line使用 awk 或任何其他编辑器编辑大文本文件:循环更改第 n 行
【发布时间】:2019-03-13 09:28:38
【问题描述】:

我有一个大 (2Gb) 文本文件,其结构如下:

-------------------------------------------------------------------------------
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)
-------------------------------------------------------------------------------

这是分子动力学运行的输出。

176是原子数,'i = n'是迭代次数,下面几行是原子坐标。我需要编写一个脚本,以以下方式修改每次迭代的前两行非常大的txt,方式如下:

-------------------------------------------------------------------------------   
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 

我知道这是微不足道的,但我完全迷失了。

【问题讨论】:

  • 空行是输出的一部分吗?
  • 粘贴完代码/内容后,可以选中它,点击{}按钮或使用键盘快捷键Ctrl+K进行格式化。请告诉我们您尝试了什么,重要的是要展示您自己的努力以获得好的答案。
  • 输出中没有空行,抱歉我没用过栈溢出...
  • ---- 行真的存在于您的输入文件中吗?如果没有,则将它们从您的示例中删除。

标签: awk notepad++ notepad


【解决方案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)
-------------------------------------------------------------------------------

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2021-05-04
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多