选择两次出现相同模式的行

选择两次出现相同模式的行

我有几行输出,有些行包含有关等待作业的信息,例如,我想选择出现多次模式的行 jobs waiting: 0

例子:

abcdef rglk,jobs waiting: 2,blah,blah,jobs waiting:0,jobs running: 1,blah,blah
lbf(kjn fk)kkj,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
gdjhgvdjh,jobs waiting: 0,blah,blah,jobs running: 1,blah,blah,jobs waiting: 0
g gg,jobs waiting: 2,blah,jobs waiting: 0,jobs running: 1,blah,blah
kjn dikfc,jobs waiting: 0,blah,jobs waiting: 0,jobs running: 1,bl ah,blah
d1d,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
kjfdk nrf(lkj rgf),jobs waiting: 2,blah,blah,jobs waiting: 0,bl ah,blah

如果命令仅返回第 3 行和第 5 行,则可以工作 我还希望能够选择与此相反的行 不幸的是,我不知道如何使用 sed 执行此操作? awk?格雷普?

答案1

亲吻grep方法:

grep 'jobs waiting: *0.*jobs waiting: *0' file

通过添加-v命令行开关来反转。

交替sed- 尝试替换第二个实例,如果成功则打印该行:

sed -n 's/jobs waiting: *0/&/2p' file

逆为

sed -n 's/jobs waiting: *0/&/2; t; p' file

awk 方法 - 使用 a 的返回值gsub

awk 'gsub(/jobs waiting: *0/,"&",$0) == 2' file

反转为

awk 'gsub(/jobs waiting: *0/,"&",$0) != 2' file

(在所有情况下,*0都允许在 之前有零个或多个空格字符0,与您的示例一致。)

答案2

您可以使用awk以下方式获取所需的行:

awk -F'jobs waiting: *0' 'NF > 2'

当我们根据所需的字符串拆分记录时,如果它至少包含 2 个实例,则字段数量将为 3 个或更多。

华泰

相关内容