【问题标题】:grep the final, instead of first occurrence of a line [duplicate]grep 最后,而不是第一次出现的一行[重复]
【发布时间】:2018-04-13 07:06:56
【问题描述】:

我正在寻找一种方法来 grep 行的最后一次出现,例如运行

$grep "!" ibrav8_c11mc12/* 

返回:

ibrav8_c11mc12/MgO.scf.a=0.090.ecut=80.k=4.out:!    total energy              =    -608.35146103 Ry
ibrav8_c11mc12/MgO.scf.a=0.090.ecut=80.k=4.out:!    total energy              =    -608.35234197 Ry
ibrav8_c11mc12/MgO.scf.a=0.090.ecut=80.k=4.out:!    total energy              =    -608.35243673 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -607.63532091 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.28250682 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.33000791 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.34213906 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.34395220 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.34488323 Ry
ibrav8_c11mc12/MgO.scf.a=0.095.ecut=80.k=4.out:!    total energy              =    -608.34496519 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -607.48596003 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.28313222 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.32079049 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.33433606 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.33598793 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.33685159 Ry
ibrav8_c11mc12/MgO.scf.a=0.100.ecut=80.k=4.out:!    total energy              =    -608.33690888 Ry

但我只想要每个文件的最后一次出现,有一个 -m 选项,

grep "!"  -m 1 ibrav8_c11mc12/* 

但这会返回每个文件的第一个匹配项。我想要的,本质上是这个选项的相反

【问题讨论】:

  • 理想情况下,但不一定。我在一个更复杂的命令中使用它: grep ! $1/* | perl -lne 'print join " ", /\d+(?:\.\d+)?/g' > $ENERGY_RESULTS,我宁愿尽可能保留
  • @Daniel 你能澄清一下 - 你需要每个输入文件的最后一个匹配项还是只需要 grep 结果的最后一个匹配项?
  • @Sundeep 我需要每个输入文件中的最后一个匹配项。提供一些背景知识,每个输入文件代表不同的物理配置。在每个输入文件中,都有一个计算偶尔会转储系统的“能量”。我只对每个输入文件的最终能量转储感兴趣。

标签: linux grep


【解决方案1】:

我的回答几乎与get last line from grep search on multiple files 完全相同,只是我需要稍微调整一下以打印出文件名:

对于 f in ibrav8_c11mc12/*out;做 GREP_RES=$(grep ! $f | tail -1);回声 $f $GREP_RES;完成

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2019-12-07
    相关资源
    最近更新 更多