当前位置: 首页 > 知识库问答 >
问题:

只有当第二个图案的最后一列满足条件时,才打印两个图案之间的行

鞠子轩
2023-03-14
#########################################
some text 

some text

........

/pattern1/ some text here also in this line

some more text

some more text

/pattern2/ some text last_column/file


some text 

some text

.........

/pattern1/

some text

.....

.....

/pattern2/ some text last_column/filed

###########################################
    null
  1. 我需要打印pattern1和Pattern2之间的所有行
  2. 只有当pattern2匹配行中的最后一列/字段大于10时,我才需要打印pattern1和pattern2之间的行,如果条件不满足,我不想打印这些模式之间的行。即pattern2匹配行的最后一列/字段小于10。

awk、sed、grep什么都可以。

共有1个答案

郎磊
2023-03-14

首先是琐碎的:

sed -n '/pattern1/,/pattern2/p' input-file

第二,我会做:

tac input-file | 
awk '/pattern2/ && $NF > 10 { p=1} p; /pattern1/{p=0}' |
tac

如果您没有访问tac的权限(它只是反转输入行),您可以执行以下操作:

awk '/pattern1/{p=1}
p{ b = sprintf( "%s%s\n", b, $0 )}
/pattern2/ { if( $NF > 10 && p ) printf "%s", b; b=""; p=0 }' input-file
 类似资料:
  • 我正在尝试创建一个新变量,该变量仅在满足特定条件时才打印一系列列的第一个值。 为了澄清,我的数据库看起来像这样: 我想创建一个变量(main),仅当值不是以C00到C99开头时,才打印第一个var列中的值。如果值确实以该条件开头,那么我想在下一列测试该条件,直到满足条件并打印该值。 因此,对于上表,新创建的变量(main)应如下所示: 我不太确定从哪里开始,但我怀疑这可能涉及突变()和ifelse

  • 我正在尝试使用一个do while循环来找出用户是想将一只狗还是一只猫检查到Java的养狗系统中。其思想是,当提示时输入“dog”或“cat”,任何输入都将导致错误,并且他们将再次被提示输入文件名。 如果输入了“cat”或“dog”,那么将为程序分配等效的文件(dogs.txt或cats.txt),然后系统将运行并将数据加载到程序中。 以下是当前的变量: 以及导致问题的方法: 下面是运行代码时打印

  • 问题内容: 这行一直有效,直到我在第二个字段中留有空格。 有没有办法让awk打印$ 2或以上的所有内容?($ 3,$ 4 ..直到我们没有更多的列了?) 我想我应该补充一点,就是我在Windows环境中使用Cygwin进行此操作。 问题答案: 将打印除第一列以外的所有内容: 将打印除第一列以外的所有列:

  • 当if语句为假时,为什么“无效运算符”会打印?我可以使用elif语句使其工作吗?

  • 我是R的新手,这是我关于堆栈溢出的第一个问题。 我正在努力 要通过引用指定新列,请执行以下操作: 对于每行 使用同一行组中第一行到下一行的值。 这符合一个条件 示例数据: 我想做的是 子集(组)按 对于每行 查找进一步向下的第一行的, 其中,和(找到的行)大于我正在更新的行的 我的预期结果是: 我使用<code>尝试了许多变体。SD,,创建一个新的列,其中包含但实际上没有得到任何结果。非常感谢任何