Linux 特定变量后的awk sep数据提取线

Linux 特定变量后的awk sep数据提取线,linux,awk,sed,Linux,Awk,Sed,我有一个大文件,有一些规则的模式 snaps1: Counter: 4966 Opens: Counter: 357283 Instance: s.1.aps.userDatabase.mount275668.attributes snaps1: Counter: 0 Opens:

我有一个大文件,有一些规则的模式

       snaps1:          Counter:             4966
        Opens:          Counter:           357283

     Instance:     s.1.aps.userDatabase.mount275668.attributes


       snaps1:          Counter:             0
        Opens:          Counter:           357283

     Instance:     s.1.aps.userDatabase.test.attributes
这些行在上面和下面的其他行中重复。 我需要打印snaps1行,还需要获取实例:line 所以我需要搜索snaps1,但前提是计数器大于0,然后打印snaps1行和实例行

对不起,我不知道怎么做? 你能帮忙吗

所以从上面的几行我应该看到这个输出

snaps1:          Counter:             4966
Instance:        s.1.aps.userDatabase.mount275668.attributes
感谢您提供的任何帮助

尝试以下方法:

awk '/snaps1/ && $NF>0{print;f=1}f&&/Instance/{print;f=0}' file
要避免在行首出现空格,请执行以下操作:

awk '/snaps1/ && $NF>0{gsub(/^ */,"");print;f=1}
     f&&/Instance/    {gsub(/^ */,"");print;f=0}'  file
结果

snaps1:          Counter:             4966
Instance:     s.1.aps.userDatabase.mount275668.attributes
解释

/snaps1/&&$NF>0{gsub(/^*/,”);print;f=1}
用于在找到
snaps1
模式时设置
f
标志,并且最后一个字段
NF
必须大于1还删除不需要的空格并打印当前行

注意
/snaps1/&&&NF
这是一个等价的表达式,原因是:对于
awk
,除零以外的任何数值都为真

f&&/Instance/{gsub(/^*/,”);print;f=0}
如果
f
标志为
True
1
并且找到
实例
模式,则打印当前行(删除不需要的空格)并将标志设置回false。

尝试以下操作:

awk '/snaps1/ && $NF>0{print;f=1}f&&/Instance/{print;f=0}' file
$ awk '/snaps1/{s=$0; c=$NF} /Instance/ && c{print s ORS $0}' file
       snaps1:          Counter:             4966
     Instance:     s.1.aps.userDatabase.mount275668.attributes
要避免在行首出现空格,请执行以下操作:

awk '/snaps1/ && $NF>0{gsub(/^ */,"");print;f=1}
     f&&/Instance/    {gsub(/^ */,"");print;f=0}'  file
结果

snaps1:          Counter:             4966
Instance:     s.1.aps.userDatabase.mount275668.attributes
解释

/snaps1/&&$NF>0{gsub(/^*/,”);print;f=1}
用于在找到
snaps1
模式时设置
f
标志,并且最后一个字段
NF
必须大于1还删除不需要的空格并打印当前行

注意
/snaps1/&&&NF
这是一个等价的表达式,原因是:对于
awk
,除零以外的任何数值都为真


f&&/Instance/{gsub(/^*/,”);print;f=0}
如果
f
标志为
True
1
并且找到了
实例
模式,则打印当前行(删除不需要的空格)并将标志设置回false。

Hi和thx我尝试了您的命令,但出现语法错误?awk'/snaps1/{s=$0;c=$NF}/Instance/&c{print s ORS$0}'adsmobout.21.37.59 awk:1行附近的语法错误awk:1行附近的退出sorry fr late/delay response——您的命令也可以工作。很抱歉,我正在尝试理解它是如何工作的…嗨,thx,我尝试了你的命令,但语法错误?awk'/snaps1/{s=$0;c=$NF}/Instance/&c{print s ORS$0}'adsmobout.21.37.59 awk:1行附近的语法错误awk:1行附近的退出sorry fr late/delay response——您的命令也可以工作。很抱歉,我正在尝试理解它是如何工作的…嗨,我也尝试了你的命令-仍然得到awk:syntax error靠近第1行awk:bailing out靠近第1行我还尝试了cat文件和pip命令相同的错误错误错误消息只来自旧的、损坏的awk,不幸的是,这是Solaris上的默认awk。如果您使用的是Solaris,请使用/usr/xpg4/bin/awk(或者功能较低且非POSIX,但nawk也适用于大多数情况)。在所有系统上,如果可能的话,尝试获取/使用GNU awk。您好,请快速回复thx-我确实尝试了/usr/xpg4/bin/awk,并对我的文件运行了它,但没有任何结果。。我知道有几行我也试过你的命令-仍然得到awk:syntax error在第1行附近awk:bailing在第1行附近我也试过cat文件和pip命令相同的错误错误错误消息只来自旧的、损坏的awk,不幸的是这是Solaris上的默认awk。如果您使用的是Solaris,请使用/usr/xpg4/bin/awk(或者功能较低且非POSIX,但nawk也适用于大多数情况)。在所有系统上,如果可能的话,尝试获取/使用GNU awk。您好,请快速回复thx-我确实尝试了/usr/xpg4/bin/awk,并对我的文件运行了它,但没有任何结果。。我知道有些台词是这样的谢谢你和你的详细解释谢谢你和你的详细解释
$ awk '/snaps1/{s=$0; c=$NF} /Instance/ && c{print s ORS $0}' file
       snaps1:          Counter:             4966
     Instance:     s.1.aps.userDatabase.mount275668.attributes