【问题标题】:Searching string in a file and outputting the line number在文件中搜索字符串并输出行号
【发布时间】:2011-09-03 22:00:32
【问题描述】:
awk '$0 ~ str{print b}{b=$0}' str="findme" path_to_file

有了这个,我可以得到找到的字符串行之前的行。
如何打印它的行号?

【问题讨论】:

  • 在看到对 thelux4 的评论后,我可以说不清楚你想要什么。从问题来看,您似乎想与 str 对齐(而不是在它之前的 line),所以正如我已经回答的那样,您应该使用 print,例如awk -v str="findme" '$0 ~ str {print}' path_to_file。但是如果你想要行号(那么问题是错误的),使用NR内置变量。
  • 问题没有错,“我如何打印它的行号?”声明我想要行号。
  • 原来听起来不一样:with this i can get the line before the found string's line. How can i also print its line? 在我的评论发送后 6.5 小时由@Johan 修复。在@eyadof 回答下发表评论后,您应该意识到您的问题需要解决,而我当时的评论应该会说服您更好地表达它。始终尽可能精确,不要假装你实际上不是。很容易检查(尤其是你自己作为 OP),所以我不知道你为什么现在提出这个问题。
  • 我的意思是实际存在的行号,但无论如何,也许我应该更清楚。感谢您的建议。

标签: file shell awk grep


【解决方案1】:

使用NR获取当前行(记录)号:

awk '$0 ~ str{print NR-1 FS b}{b=$0}' str="findme" path_to_file

【讨论】:

  • +1。您可以只使用print NR-1, b 而不是显式使用FS
【解决方案2】:

如果我正确解释了这个问题,而您只是想打印包含给定字符串的任何行之前的行号,您可以这样做:

$ awk '/findme/{print NR - 1}' /path/to/file

【讨论】:

    【解决方案3】:

    这是一个解决方案:

    awk '$0 ~ str{print b;print}{b=$0}' str="findme" path_to_file
    

    或者,如果您不介意稍微不同的输出,其中有“--”分隔找到的行组:

    grep -B1 findme path_to_file
    

    在这种情况下,您在文件“path_to_file”中搜索字符串“findme”。 -B1 标志说,“在此之前也打印 1 行。”

    【讨论】:

      【解决方案4】:

      你可以使用echo $(awk '$0 ~ str{print b}{b=$0}' str="findme" path_to_file)

      【讨论】:

      • 这会打印该行。我想要的行数实际上不是行本身。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2020-11-28
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多