【问题标题】:How to count the lines which contain a specific range or interval of numbers using awk or grep?如何使用 awk 或 grep 计算包含特定范围或数字区间的行数?
【发布时间】:2013-08-27 05:49:07
【问题描述】:

我有以下几行:

DL_SINR 48 106.202 660.04 16.9651 18 7992
DL_SINR 49 116.333 660.363 16.9413 18 7992
DL_SINR 50 135.815 654.794 24.218 24 13536

我想计算第三列中哪些行包含介于100.0105.0 之间的数字。

我已经搜索了很多,但我找不到它。 grep 或 awk 会很棒。

【问题讨论】:

    标签: awk grep


    【解决方案1】:

    Awk 是完成这项工作的好工具。它以空格分隔行,它们以1 开头编号,因此第三个字段将是$3

    awk '$3 >= 100.0 && $3 <= 105.0 { count++ } END { print count ? count : 0 }' infile
    

    【讨论】:

    • 你忘了BEGIN...?
    • 这是我得到的最快最完美的答案。你真是个天才,非常感谢,你真的救了我。
    • @twalberg :不知何故,没有BEGIN 的结果为零,而有它的结果为3。
    • @iamauser 好吧,仅给定示例输入,结果应该为零,因为所有三行都是$3 &gt; 105
    【解决方案2】:

    您可以使用awk 获取第3 列值介于100 和105 之间的行,并使用wc -l 获取总行数。

    awk '$3>=100&&$3<=105 {print $0}'  test.txt | wc -l
    

    【讨论】:

      【解决方案3】:

      使用

      $ perl -anE '$c++ if ($F[2] >= 100.0 and $F[2] <= 150.0);END{say $c}' file
      3
      

      【讨论】:

      • 不需要-l 开关。它处理输入和输出中的行尾,但您不使用它们。
      • 正确,已在我的帖子中删除
      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多