0

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

文件1:

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

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

解析数据后输出:

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
4

3 回答 3

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
于 2013-05-05T13:02:48.053 回答
1
perl -ne '($k)=/^(\w+)/; if (/\b0\b/){ print $v{$k}, $_ }else{ $v{$k}=$_ }' file
于 2013-05-05T07:58:37.013 回答
1

这可能对您有用(GNU sed):

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

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

于 2013-05-05T07:12:08.227 回答