【发布时间】:2020-01-24 02:10:02
【问题描述】:
我有一个包含大量信息的文件,我想从这里提取一些数据。我只会在这里发布有趣的部分。我想提取 IQ 和 JQ 值以及上面两行的 J_ij[meV] 值。我读了这个问题How to print 5 consecutive lines after a pattern in file using awk,其中一个模式用于提取下面的信息,我正在考虑做类似的事情。我最初的想法是:
awk '/IQ =/ { print $6,$12 } /IQ =/ {for(i=2; i<=2; i++){ getline; print $11 }}' input.text > output.txt
循环似乎不工作
IT IQ JT JQ N1 N2 N3 DRX DRY DRZ DR J_ij [mRy] J_ij [meV]
IT = 1 IQ = **1** JT = 1 JQ = **1**
->Q = ( -0.250, 0.722, 0.203) ->Q = ( -0.250, 0.722, 0.203)
1 1 1 1 0 0 0 0.000 0.000 0.000 0.000 0.000000000 **0.000000000**
IT = 1 IQ = **1** JT = 6 JQ = **6**
->Q = ( -0.250, 0.722, 0.203) ->Q = ( 0.000, 1.443, 0.609)
1 1 6 6 -1 0 -1 -0.250 -0.144 -0.406 0.498 0.135692822 **1.846194885**
IT = 1 IQ = **1** JT = 8 JQ = **8**
->Q = ( -0.250, 0.722, 0.203) ->Q = ( 0.000, 0.577, 0.609)
1 1 8 8 0 0 -1 0.250 -0.144 -0.406 0.498 0.017676555 **0.240501782**
我的预期输出是:
IQ JQ J_ij [meV]
1 1 0.000000000
1 6 1.846194885
1 8 0.240501782
它来自粗体字(** **),第一行仅是指示性的。
【问题讨论】:
-
欢迎来到 SO,特别感谢您在问题中添加您尝试的代码。您的输入示例不清楚,因此请将其包装在代码标签中,并在相关代码标签中提及预期输出,然后让我们知道。
-
I have a syntax error on "&&" and I don't know how I can fix it- 我不知道&&应该是什么意思,但看起来您只想删除&&。或者您可以将整个} && /IQ =/ {替换为; -
@KamilCuk 它解决了我一半的问题,现在我需要从标签下方的 2 行中提取信息(循环似乎不起作用)
-
好吧,看看
i=2; i<=2您想从标签下方的两行或标签下方的第二行中提取信息?它看起来像print $6, $12; getline; getline; print $13。当然。你能解释一下输出是如何创建的吗?第一列来自哪里?第二列(输入中有很多6)?第三列? -
我只想从这些行中提取,我不知道我该怎么做@KamilCuk。我想从我的标签下方的第二行中提取。我重新编辑了我的问题。