【问题标题】:Search and Print by Two Conditions using AWK使用 AWK 按两个条件搜索和打印
【发布时间】:2020-06-01 11:43:43
【问题描述】:

我有这个文件:

         - - - Results from analysis of weight - - -
 Akaike Information Criterion   307019.66 (assuming 2 parameters).
 Bayesian Information Criterion 307036.93

                 Approximate stratum variance decomposition
 Stratum     Degrees-Freedom   Variance      Component Coefficients
 id                 39892.82    490.360         0.7     0.6     1.0
 damid                  0.00    0.00000         0.0     0.0     1.0
 Residual Variance   1546.46    320.979         0.0     0.0     1.0

 Model_Term                             Gamma         Sigma   Sigma/SE   % C
 id                     NRM_V 17633  0.18969       13.480       4.22   0 P
 damid                  NRM_V 17633  0.07644       13.845       2.90   0 P
 ide(damid)             IDV_V 17633  0.00000       32.0979      1.00   0 S
 Residual               SCA_V 12459  1.0000        320.979     27.81   0 P

我想在id上打印Sigma的值,注意文件上有两个id,所以我也使用了基于NRM_V的条件。

我试过这个代码:

tac myfile | awk '(/id/ && /NRM_V/){print $5}'

但打印的结果是:

13.480
13.845

我只需要第一个

【问题讨论】:

  • tac 从最后一行到第一行读取 Input_file,你真的要这样读取文件吗?因为它可能会改变输出的第一行。

标签: awk conditional-statements tac


【解决方案1】:

你能不能试试,我在这里添加了awkexit 函数,这将帮助我们在第一次出现条件时尽快退出代码,这也有助于我们节省时间,因为它不再读取整个 Input_file。

awk '(/id/ && /NRM_V/){print $5;exit}' Input_file

OR 与列:

awk '($1=="id" && $2=="NRM_V"){print $5;exit}' Input_file


如果您想从最后一行向第一行读取文件并获取其第一个值,请尝试:

tac Input_file | awk '(/id/ && /NRM_V/){print $5;exit}'

OR 与列比较:

tac Input_file | awk '($1=="id" && $2=="NRM_V"){print $5;exit}'

【讨论】:

  • @CuriousG。它会尽快从代码中退出,并且不会进一步处理任何可以节省我们时间的行,我使用它是因为您只想打印第一次出现。
【解决方案2】:

问题是/id/ 也匹配damid。仅当第一个字段为 id 且第二个字段为 NRM_V 时,您才可以使用以下内容打印 Sigma 值:

awk '$1=="id" && $2=="NRM_V"{ print $5 }' myfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多