【问题标题】:delete lines after pattern (excluding pattern) using AWK使用 AWK 删除模式后的行(不包括模式)
【发布时间】:2021-08-23 10:45:37
【问题描述】:

我想用 AWK 命令删除一个模式后的 N 行。

输入文件.txt

bla bla
bla bla
pattern
these lines
are not 
requires
I want to delete 
these...
up to nth line
....
....

必需的输出文件.txt

bla bla
bla bla
pattern

尝试过的解决方案

awk '/pattern/ {exit} {print}' file.txt

我找到了这个命令here,但我也需要“模式”。 请帮忙!

【问题讨论】:

  • 如果您将问题中出现的“模式”一词替换为字符串或正则表达式和全部或部分,那么我们真的可以帮助您,否则您可能会得到答案与您实际遇到的问题不同,但它会从您的样本输入中产生预期的输出。见how-do-i-find-the-text-that-matches-a-pattern
  • 你说I want to delete N lines after 但你的代码和你接受的答案删除了它之后的所有行,而不仅仅是N行。你真的想只删除一些行还是所有行?

标签: awk


【解决方案1】:

awk 动作可以有多个语句,所以这样的事情应该可以工作:

awk '/pattern/ {print; exit} {print}' file.txt

【讨论】:

  • 非常感谢@Wander Nauta。感谢您的回答!
  • 不,这不是您编写脚本的方式,而是执行该脚本的操作,而是使用awk '{print} /pattern/{exit}',这样您就不会重复print 语句。无论如何,这可能是错误的答案,这取决于 OP 所说的“模式”是什么意思。
【解决方案2】:

更简单更短的sed

sed '/pattern/q' file

bla bla
bla bla
pattern

【讨论】:

  • 谢谢@anubhava,感谢您的回答!
【解决方案3】:

永远不要在匹配文本的上下文中使用“模式”这个词,因为它非常模棱两可。例如,这些中的每一个都会从您发布的示例输入中产生预期的输出,但意味着非常不同的东西,并且在给定不同的输入的情况下会表现得非常不同,您使用的正确的输出取决于您所说的“模式”:

完整的正则表达式匹配:

$ awk '{print} /^pattern$/{exit}' file
bla bla
bla bla
pattern

部分正则表达式匹配:

$ awk '{print} /pattern/{exit}' file
bla bla
bla bla
pattern

全串匹配:

$ awk '{print} $0=="pattern"{exit}' file
bla bla
bla bla
pattern

部分字符串匹配:

$ awk '{print} index($0,"pattern"){exit}' file
bla bla
bla bla
pattern

还有其他可能性取决于您是否需要单词或行匹配。见How do I find the text that matches a pattern?

【讨论】:

    【解决方案4】:

    你很接近,如果模式匹配,你只需要先print 然后exit。让file.txt内容成为

    bla bla
    bla bla
    pattern
    these lines
    are not 
    requires
    I want to delete 
    these...
    up to nth line
    ....
    ....
    

    然后

    awk '{print}/pattern/{exit}' file.txt
    

    输出

    bla bla
    bla bla
    pattern
    

    (在 GNU Awk 5.0.1 中测试)

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2013-10-03
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2020-06-12
      • 2021-10-15
      相关资源
      最近更新 更多