比较零数据的行和列

时间:2013-05-05 06:40:40

标签: perl sed awk

我有一个包含以下数据的文件。

File1中:

Server counter         1:00 2:00 3:00 4:00
site1 serverdowntime  15     0     3     500
site1 serverdowntimesuc  15     0     3     500

...

site12 serverdowntime   2     7     8      5
site12 serverdowntimesuc   2     7     8      5

...

site50 serverdowntime   2     12     8      45
site50 serverdowntimesuc   2     0     0      45

...

site57 serverdowntime   2     12     8      45
site57 serverdowntimesuc   2     0     0      0

每两行用于同一站点。第一列是设备,第二列是问题,第三列可以包含尽可能多的列数。我正在寻找一种方法来查看时间数据,并找到每两行只包含单个零。

解析数据后的输出:

site57 serverdowntime   2     12     8      45
site57 serverdowntimesuc   2     0     0      0
site1  serverdowntime   15    0       3     500
site1  serverdowntimesuc 15  0     3    500
site50 serverdowntime   2     12     8      45
site50 serverdowntimesuc   2     0     0      45

3 个答案:

答案 0 :(得分:2)

$ awk 'NR==1{next} !(NR%2){line1=$0;next} {$0=line1"\n"$0} /\<0\>/' file
site1 serverdowntime  15    0       3     500
site1 serverdowntimesuc 15  0     3    500
site50 serverdowntime   2     12     8      45
site50 serverdowntimesuc   2     0     0      45
site57 serverdowntime   2     12     8      45
site57 serverdowntimesuc   2     0     0      0

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r '$!N;/^(\S+)\s.*\n\1/!D;/(^|\n)(\S+\s+){2}[^\n]*\s0(\s+|\n|$)/p;d' file

这会获得一对第一个字段作为键的行,然后在第3个字段中搜索0模式。

答案 2 :(得分:1)

perl -ne '($k)=/^(\w+)/; if (/\b0\b/){ print $v{$k}, $_ }else{ $v{$k}=$_ }' file