2013-05-05 81 views
0

我有一个包含以下数据的文件。比较零数据的行和列

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 

每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 
+0

唯一的单为零?你的输出中的第二行包含三个零 – gaussblurinc 2013-05-05 06:53:17

+0

正确的我仍然会喜欢来自其余列的数据,它们可以少至一列或10列以上的数字,但带有单个零的行是我最感兴趣的内容 – GenericUser 2013-05-05 06:56:53

+0

它们也是成对的,所以即使只有一行中只有0个数据,我也需要这两行。 – GenericUser 2013-05-05 07:00:29

回答

1

这可能会为你工作(GNU SED):

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

这得到一对与第一场为重点线,然后搜索了0模式在第3个起始字段中。

1
perl -ne '($k)=/^(\w+)/; if (/\b0\b/){ print $v{$k}, $_ }else{ $v{$k}=$_ }' file 
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