Newsgroups: comp.org.usenix,comp.unix.admin
Path: sparky!uunet!uunet!kolstad
From: kols...@uunet.uu.net (Rob Kolstad)
Subject: LISA V Admin Survey Results
Message-ID: <1992Jan8.170054.25118@uunet.uu.net>
Followup-To: kols...@bsdi.com
Keywords: administration, time, effort, summary
Sender: use...@uunet.uu.net (UseNet News)
Nntp-Posting-Host: rlavax.uu.net
Organization: UUNET Communications Services
Date: Wed, 8 Jan 1992 17:00:54 GMT
At the 1991 Large Installation system Administration V (LISA V) conference
(Sept. 30-Oct. 3, 1991, San Diego, CA), Jeff Polk and I distributed a
survey pertaining to the time expenditure of system administrators. This
is the promised results and data from that survey.
I was able to glean 132 usable survey forms from the group. From
doing so, of course, I learned much about what I *should* have done,
had I only known at the time. Probably the most instructive part is
that my initial set of potential time sinks (shown here):
Applications Install/Management
Backup
File/disk management
H/W Install/Configure
Management of subordinates
Network Management
Net H/W Troubleshoot/Repair
Non-net H/W Troubleshoot/Repair
System Software Troubleshoot/Repair
Non-System-Software Troubleshoot/Repair
Performance management
Recover
User Assistance & Training
YP/NIS Management
should have included many more topics (see summaries below).
Many have speculated that backups take up lots of time, that hardware
requires the most, etc. etc. -- as if administrators were really
performing just a single task and that once we understood that task, then
we'd understand their job.
This turns out not to be the case. Administrators report an
incredible variety of tasks (broken down into about 45 categories,
including miscellaneous). I'm sure the survey would have yielded far
more interesting and accurate results if I had only included the 31
categories that were `write-in's -- then, the respondents would have
considered them and included responses.
It's important not too draw too many conclusions from surveys in general.
This survey was handed to about 400 administrators at the LISA V
conference. One third of them (self-selected) returned the survey.
The average respondent claimed about 42.6 hours of work each week. Some,
of course, claimed much more. Some were only part-time administrators,
thus reducing the average. I think that the summaries below are useful
moreso for their distributions than for the averages.
Probably the most interesting result is that *on average* administrators
spend over 25% of their time dealing with users and their applications.
See the histograms much later for details on some administrators (who
spend >75% of their time dealing with users). This survey included
administrator managers who *never* see users.
Backup and restore is widely touted as a timesink for administrators.
Note that backups *average* 1.8 hours/week with 46 of 132 (~35%)
respondents spending 0 time on backups.
Password file & Yellow Pages maintenance totaled just 1.1 hours/week, on
average. Password file maintenance was a write-in topic, unfortunately.
About half (72/132) of the respondents indicated 0 time on user-record
maintenance; the remainder showed a distribution skewed toward the low end
(31 <1 hour; 19 < 2 hours; 14 >= 2 hours) [combined Yellow Pages &
Password File maintenance].
The tabular results below show the number of respondents who answered
various numbers of hours per week for a given task. The 0 column
indicates no reply or a reply of 0 hours/week (probably equivalent
since the totals work out reasonably).
The average is for all 132 respondents -- not just those who responded
with non-0. I have sorted the output in decreasing levels of effort
expended.
Skip down a bit over 60 lines to see some histograms.
[Line 198 marks the start of the user:administrator ratio discussion].
[Line 250 marks the start of the data and programs in shar format].
0 <=1 <=2 <=3 <=4 <=5 <=6 <=7 <=9 <=10 >10 AVG
13 7 14 10 15 16 5 2 8 0 41 7.1 Dealing with users
19 26 26 11 14 15 2 1 4 0 13 3.8 Applications
56 9 25 4 10 11 0 0 3 0 13 3.3 Managing Subordinates
20 17 35 15 13 17 1 0 3 0 10 3.1 System Software
23 20 29 13 15 16 1 0 3 0 11 3.1 H/W Install/Configure
35 31 26 7 2 14 1 0 2 0 13 3.0 Network Management
17 28 37 9 11 19 1 1 3 0 5 2.7 Disk management
30 20 32 9 13 15 3 1 2 0 6 2.7 Non-system Software
35 46 31 4 3 5 0 0 3 0 4 1.8 Performance
46 29 22 11 9 9 2 0 1 0 2 1.8 Backups
43 29 30 10 7 8 2 0 0 0 2 1.7 Hardware
47 43 18 11 4 4 0 0 2 0 2 1.4 Network Hardware
113 0 1 2 5 2 0 0 1 0 7 1.1 SW Development
72 28 18 5 3 2 1 0 1 0 1 1.0 Yellow Pages/NIS
112 0 1 2 5 4 1 2 0 1 3 0.9 Reading
108 0 3 2 5 9 2 1 1 0 0 0.8 Meetings
58 55 14 1 2 0 0 0 1 0 0 0.7 Restores
120 2 1 2 2 0 0 1 1 0 2 0.4 Miscellaneous
123 1 2 0 1 1 1 0 1 0 1 0.3 Evaluating products
125 1 1 1 0 2 0 0 0 0 1 0.2 Upper Management
127 0 1 1 0 0 0 0 1 0 1 0.2 Proposal writing
128 0 0 0 1 0 0 1 0 0 1 0.2 Policy issues
124 1 4 1 1 0 0 0 0 0 0 0.1 Dealing with Vendors
125 1 2 1 0 2 0 0 0 0 0 0.1 Personal Growth
126 0 4 0 0 1 0 0 0 0 0 0.1 Planning
126 3 1 0 1 0 0 0 0 0 0 0.1 Passwd file maint.
127 0 1 2 0 1 0 0 0 0 0 0.1 Documentation
127 1 0 1 2 0 0 0 0 0 0 0.1 Security
128 0 1 0 0 2 0 0 0 0 0 0.1 Sendmail
129 0 0 0 1 1 0 0 0 0 0 0.1 Customer service functions
129 0 0 0 1 1 0 0 0 0 0 0.1 DB maintenance
129 0 1 0 0 0 0 0 1 0 0 0.1 UUCP
129 0 1 0 0 1 0 0 0 0 0 0.1 EMail
130 0 0 0 0 0 0 0 0 0 1 0.1 Testing
130 0 0 0 0 0 0 0 1 0 0 0.1 Problem Solving
129 0 2 0 0 0 0 0 0 0 0 0.0 Reading news
129 1 0 0 0 1 0 0 0 0 0 0.0 Monitoring
130 0 0 0 0 0 1 0 0 0 0 0.0 Staff issues
130 0 0 0 1 0 0 0 0 0 0 0.0 Public Relations
130 0 0 1 0 0 0 0 0 0 0 0.0 Printers
130 0 1 0 0 0 0 0 0 0 0 0.0 Demonstrations
130 0 1 0 0 0 0 0 0 0 0 0.0 Ordering
130 1 0 0 0 0 0 0 0 0 0 0.0 Bind
130 1 0 0 0 0 0 0 0 0 0 0.0 FTP'ing files
130 1 0 0 0 0 0 0 0 0 0 0.0 Travel
42.6 TOTAL
Relatively useless presentation of the `site statistics':
2 25 23 16 15 11 9 7 6 7 10 5.2 Number of sysadmins
7 1 1 0 1 1 0 0 0 0 120 338.0 Number of FTE Users
37 0 6 2 2 4 0 2 1 0 77 75.7 Dataless Workstations
61 4 6 0 5 6 1 1 1 0 46 31.5 Diskless Workstations
29 3 3 1 7 2 2 4 4 0 76 403.3 Dataful Workstations
4 8 8 10 10 12 1 7 5 0 66 18.7 Servers
24 1 13 5 1 2 1 0 1 1 82 301.0 PCs
27 8 6 1 3 5 2 0 0 0 79 182.8 Macs
6 1 2 1 7 2 7 4 3 0 98 76.2 Server GB
28 11 5 6 5 6 2 2 3 0 63 51.6 Workstations GB
125 0 0 0 0 0 1 0 0 0 5 2.3 X-Terminals
======================================================================
======================================================================
These few histograms show some of the distributions that are not
apparent from the tabular summary. The scale includes the number of
people in each histogram bucket and, on the next line, the range for
for that bucket. The means presented here are of the *non-zero*
entries, not all entries.
Skip about 45 lines to see the histogram for number of administrators/user.
----------------------------------------------------------------------
117 items; 0.5 -> 30; mean of nonzero entries= 7.83
Max bucket is 25; $#bucket is 14
*
*
* * *
* * *
* * *
* * * *
* * * *
* * * *
* * * *
* * * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
21|25|21|10|16| 4| 0|10| 1| 6| 0| 0| 0| 2| 2|
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 31
--> Dealing with users <--
------------------------------------------------------------------------------
111 items; 0.1 -> 35; mean of nonzero entries = 4.44
Max bucket is 52; $#bucket is 14
*
*
*
*
*
*
*
* *
* *
* * *
* * *
* * *
* * * *
* * * * *
* * * * * * * * *
52|25|18| 4| 7| 0| 2| 0| 2| 0| 0| 0| 0| 1| 1|
0 2 4 7 9 11 14 16 18 21 23 25 28 30 32 35 37
--> Applications <--
------------------------------------------------------------------------------
Management just loves to know how many administrators they should have
for their user community. They wish that they could know the constant
(let's call it alpha) so that they can use the formula:
#administrators = #users / alpha
to compute the number of administrators they need.
Unfortunately, as the histogram below shows vividly, alpha is not an
easily discernible constant. The number of administrators required varies
with the services required of the administrators. More services means
more administrators. Less services; fewer administrators. Of course,
sites breaking the 30-50 full-time-equivalent user barrier are finding
that they require at least one administrator just to keep things up and
running.
I removed some of the larger ratios from the histogram so that it didn't
have 100 of the respondents clumped at the left side. The removed ratios
are shown. One site claimed an 1800:1 ratio for users to administrators!
One would imagine that they provide less service per user than sites with,
say, a 10:1 ratio.
------------------------------------------------------------------------------
REMOVING ALL DATA > 100
98 items; 0.125 -> 100; mean = 89.7
Max bucket is 18; $#bucket is 14
* *
* *
* *
* *
* *
* *
* * *
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
2| 8|17| 4| 5| 8| 5|18| 3| 1| 7|10| 0| 4| 7|
0 6 13 20 26 33 40 46 53 60 66 73 80 86 93 100
--> USR/ADM <--
Removed:
119 120 123 125 125 125 143 143 150 150 150 167
200 200 250 250 267 267
300 329 333
500
1800
------------------------------------------------------------------------------
And here is the data and some PERL programs to interpret it. If you
find any good results or interpretations, please do share them with me
(kols...@bsdi.com).
------------------------------------------------------------------------------
#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 01/08/1992 16:28 UTC by kolstad@ace
# Source directory /home/ace/kolstad/survey
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 9181 -rw-rw-r-- data
# 1035 -rw-rw-r-- titles
# 842 -rwxrwxr-x get.perl
# 1328 -rwxrwxr-x hist.perl
# 970 -rwxrwxr-x table.perl
#
# ============= data ==============
if test -f 'data' -a X"$1" != X"-c"; then
echo 'x - skipping data (File already exists)'
else
echo 'x - extracting data (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'data' &&
BU:INST:NETM:HW:SW:REST:YP:APP:DSK:MGMD:NETH:SYSW:PERF:USER:ADM:NUSR:DATW:DSKW:FULW:SERV:PC:MAC:SGB:WGB:XTRM:MON:TEST:FTP:DB:MGMU:BIND:UUCP:MISC:POL:GROW:ORDR:VEND:PUBR:PLAN:DOC:SNDM:DEMO:READ:PRNT:MAIL:TRAV:PROP:MEET:PW:STAF:SEC:PROB:DEV:EVAL:NEWS:CSS
3:2:2:2:2:::2:2:::2:2:2:4:200::25::4:150:10:26:5::::::::8
:::::::::32:::::9:200:200:5:100:20:10:20:2:1::::::::::::::::::::::::::::8
:4:2:6:4::4:3:1:::2::4:6:300:180::4:4:2:12:19:26:::::::::::::::::::9
::1:2:5::1::2:5:5:2:2:10:2:80:26::6:3:3:30:6:6::::::::::::::::::::::::5
:5:::2:::35:1:::5:2:5:4:1000:7:7:700:5:::100:5
2:6:0.5:6::1:::2::0.5:2::3:9:700:250:20:10:40:200:150:100:40::::::::::::::::::::::::::6:::16
4:2:2:1:2:1::4:8::1:1:8:4:1:20:16:4:1:4:10:1:30:10:::::::::::::::2
1:3:0.5:0.25:0.5:0.25:0.5:1:4::0.25:0.5:1:3:0.5:10:::10:2::15:4:2.7:::::::::::::::::::::::::::::20:::5
5::5:::::::20:::::7:300:10:250:20:20:50:100:100:::::::10:::::5
5:5:5::1::::1::1:1::20:7:30:10:250:35:35:50:100:100::::::::::::5
0.5:3:0.5:1:2:0.25:2:0.5:2::0.25:2:1:30:1:75:60:12::3:20:10:10:10::::::0.5:::0.5::::::2::::::::::::::3
:3:2:1:2:1::10:2:4:1:4:15:3:2:300:2:18:49:11:::38:5
:2:1:1:4:1::10:2:5::3:15:2:2:300:2:18:49:11:::38:5
:10:5:5::::2:5:::5:1:5:4:400:100::25:10:50:10:20:1
2:4:1:2:2:1:2:4:4:1:1:4:2:8:9:130:40:30:15:10:200:200:70:60::::::::::::::::::::::::6::::::4
:4:2:1:4::5:5:2:0.5::2:2::4:400:15::12:8:400:100:16:::::::::::::::::::::::::5
2:2::2:2:2:0.4:4:4:4:0.4:2:2:5:5::280:::20:2000::40:6::::::::::::::::::2::::::::::::6
2:4:2:2:5:2::2:4:2:1:4:2:4:7:1000:30:50:100:15:200:200:40:25:::::4::::::::::::::::::::::::8
:4::2:3:::1:5:::4:1:3:9:800:75:15:150:70:500:150:75:125::::::::2:::::::::5::6:::::2:::::::2
:4::5:1:::3:4:4::4:1:3:9:800:75:15:150:70:500:150:75:125:::::::::2::::::::::3:::::4:::::2
5:5:2:1:1:1:1:5:2:::5:1:6:2:180:20:23:51:12:150:25:24:35:40::::::::::::::::::::::::::::5
:8:5:::::2::2:2:2::8:0.75:5:::8::4:6::12:::::::::::2
:5::5::::5:5:8::5::10:2:175:14:15:26:16::10:17.5:13.5:21:::::::::7::::4
2:2::2:2::2:2:2::1:4:::1:20:8:4:6:3:3:1:4:2:::::::::::::::2::::2:::1::5::::::1
2:1:1:2:2::8:2:3::1:1:1:15:1:65:::20:4:500:25:6:12:20:::::5
:3::::3::7::20:::::7:2300:::20:20:1000:1000:51::::10
4::::4:::16::12:8:8:::5::250:::14:100:10:40:4
0.5:4:20::4:4::1:2::5:2:5::2:600:::4:1:50:60:27:3:::::5::::::::::::::::::::::::::2
0.5:0.25:1:1:3:0.5:2:20:2:2:1:3:2:10:2.5:500:20:60:30:25:2:1:75::::::::::::::::::::3::::::::::5
1:2:2:1:6:1:3:1:1::1:4:1:12:6:750:500:4::13:5000:30:45:50::::::::::::::::::::::::4
6:1:2:1::2:3:3:1::3:3:1:6:6:750:500:4::13:5000:30:45:50::::::::::::::::::::::::8
1:2:2.5:1:5:2::8:5:5:2.5:2:2:12:1.5:30:25:24:4:4:2:3:10:0.2:::::::::::2::4::2::::4
5:1.6:5:1.6:3.3:0.7:1.6:1:3.3:3.3:1.6:3.3:1.3:5:3:100::5:50:5:6:15:45:1.2
3:3:3:3:5:1::3:3::3:6:2:5:1:48:::25:2:2:10:7:4:12::::::::::::::::::5
2:2:2::2:2:2:2:5:10::2:2:2:3:800::124:40:20:300:500:30:60:::::::::::::::::::::::::::::10
2:5:3:2:2.5:0.5:4:4:3.5:2:0.5:2.5:3:10:2:100:60::7:8:170:3000:26:10
:5:::5::1:10:2:::15:1:15:8:950:40:6:20:8:10:40:6:8
2:5:5:2:2:1:1:2:1:2:2:2:1:16:2:32:7::4:1:16::8:1
::::5:2:3:2:2:5::3::2:3:50:50:::5:::20::::::::::::::::::::15:::::5
0.5:0.5:2:2:5:1:0.5:5:1::3:5:0.5:10:1:20:::15::100:::15:::::::::::::::::::5:::::::::::8
0.5:5:3:1:5:1:1:5:2:5:1:15:2:15:15:400:100:20:10:8:15:35:42:90::::::::::::::::::::::::5
3::0.5:::::1::38:::::8:600:75:15:150:70:100:150:75:125:::::::::::::::::::10
1:2:10:2:1:1::1:1:20:2:2:1:2:7:1000::::10:1500::15
2::1:3:4:2::3:2:1:1:3:3:10:2:75::1::4:70::4:1
3:1:0.25:1:0.25:1:2:10.5:5:2:1:3:5:2:2:97:40:20:15:7:20:20:24.5:14:::::::::::::::::::::::::::3
0.5:5:2:::1:1:5:5:1:2:5:1:5:5:100:10::50:10:100:200:17:30:::::::::::::::::::6.5:::::5
1:12:::6::1:10:1:::8::5:7:300:16:4:7:17:15:15:40:5
1:2::2:2:2:2:2:1::2:2:4:10:2:100:100:5::3:::16:40:::::::::::::::::::4::::::::::4
1:2:4::8:1::4:6:::4.5:8:4:1:100::::4:120::17
5::5:::1:2:2:10:1:2:4:2:10:4:120:40::80:15:2:25:35:45
1:4:1:3:2:1::1:8:::2:2:8:6:400:200:20:14:16:50:150:140:300
3:2::3:10:1::3:::3:5::15:3:100:40::40:4:10:50:10:10
4:2:16:::::2:2:2:::4:8:4:30:5:2:7:2:10:10:15
::::5:::::10::5::4:6.5:800:300:300:50:20::500:700:1000:::::::::::::::::::5::::8:6
:2:10:::::2:2:2::2:1:4:4:100:4:1:4:4:20:20:12:3
4:1:1:1:1::::7:2:1:::1::2:::4:1:3:2:2:6.5
:2:::4:::15::2::2::15:15:4000:100:20:800:15:::2000:160
0.5:3:1:1:2:0.1::1:2:2:1:1:0.2:2:4:150:70:20:20:10:3:1:20:10:::::::::::::::::::::::::2::1
1::1::::2:4:10::10:10:2::3:200:::90:5::20:75:1
6:2::3:2:1::1:4:2::2:1:15:2:150:::80:7:15:25:20:80
2:2:5:2:2:1:2:1:4::1:2:1:15:2:150:::80:7:15:25:20:80
:5:18:1:10:1:1:4:3:2:1:5:5:3:2:500:300:::10:400:5:300:200
1:4:5:3:1:1:3:4:3:::1:2:10:0.5:60::5:50:7:2000:1400:5:1::5
::28:::::::4:8::::5:200:20::30:200:2000:25:25:20
2:5:1::15:1::5:3::1:2::5:1:12:3::1:1:2:15:7:4
:3:12::3::5:3:2:3:3:5:3:5:2:40::1:75:5:3:2:4:25::::::3:::::::3
2:8:8:::4:4:4:4:2::2::4:20:1000:300::200:10:2000:500:200:1000
5::5:4:5:2::2:5:5:4:5::2:3.5:40:50::5:5:2:4:42:20
::10::::::8::2:::20:8:320:::365:15:::5.7:139
3:1:2:1:4:0.5:2:1:1:2:0.5:4:1:1:4:30:10::20:3:8:1:30:5
:10::3::1:2:2:5:::15::2:5:300:30:50:200:8:100:300:7:100
:::::::::30:::::50:1000:50:300:50:100::300:50:::::::::::10
2:4:::1::1:20:1:::1:5:4:1::::17:1::1:1:8
5:1:::2:1::2:3:2:1:1:2:5:20:1000:25::475:30:500:20:50::::::::::3::::::::::4:::::3
0.5:4:2:1:1:0.5:1:4:0.5:2:1:1:2:8:3:120:70:40:10:20:2:120:60:10:::::::::::::1::::::4:::::4
0.2:0.5:0.5:0.5:2:0.2:1:2:0.5:3:0.2:2:0.5:3:0.5:50:14:::3:20:6:100:4:::::::::::::::::::::::::::::3
4:2:::12:::4:2:::::4:0.1:4::::1:::4::6::::::::::::::::::::::::::::12
2:10:6:::2::2:10::2:4:4:2:3:70::::18:50:10:50
::2::4::1:5:10:8:4:3:2:1:30:1600:200::100:40:100:500:200:150
1:1:2:4:2:1:2:5:2:2:1:2:1:6:3:200:2:20::5:20:20:8:1::::::::::::::::::::::::::::::2
1:2:1:0.5:0.5:0.5:0.5:1:2::1:1:0.5:30:3:130::2:118:7:10:30:25:40::::::::::::::::2
2:1:2:2:5:2:1:1:3::1:2:1:10:1:50:2:25:28:5:5:4:12:30::::1:::::::::::::2::::::::4
8:3:2::::::4::2:4::12::80::::11:40:12:8::::::::::::::::::::5::::::1
2:2:1:4:2:1::3:2:4:1:8:1:4:3:200:30:40:40:10:75:40:17:20:::::::::4::::2::::::::::::::::4
3:4:2:4:2:1:3:4:5:4:3:3:3:8:5:250:3:5:100:10:150:30:20:300::::::::::::::::5::::3
0.5:10:0.5:2:0.5:0.5:0.5:1:0.5:2:1:0.5:1:5:5:500:375:::7:50:5:150::::::::::::::::::::::::::::::15:2
1:1:::::2:4:2:10:5:::20:5:50:5:70:7:11:15:50:20:2
:4:0.6:4.8:4:::6:0.2:4:0.8:2.4:2:4:2:100:50:25:15:10:12:20:2000:2:::::::::::::2::::::::::2::::3.2
3:4:2:4:4:1:1:2:2::1:2:2:8:1:150::1::15:2:10:30::200:::::::::::::::::::::::4
2:2:5:3:2:1:1:5:1:5:1:3:1:3:4:200:5:50:100:10:300:150:70:15
5:15::5::1:1::1:::5::1:4:70:20::200:5:2::20:200
4:10::18::2:1:2:1:::5::2:4:70:20::200:5:2::20:200
1:1:2:5:10::::5::5:10:1:1:6:400:100:30:20:50:50::100:200
2:3:1::1:::8:1:5:3:4:1:7:12:200:200:5:100:20:30:10:40:200
19:3:::3::::2:1:::2:10:6:420:::1:11:120:1:40:1
1:10::10::8:15:2:::3:::5:3:600:5:245:2:25:100:30:60:1
:0.5:2.5::1:::5:2:3::2:15:10:1:1800:500:1000::3:2000:2500:5:::::::::::::::::3
:::2:4:::::4::10:10:4:4:300:300::10:150:10:10:300:120:::::::::::::::::::::::15
:5:2:2:5:1:::2::3:5:1:6:3:60:2::25:1::12:6:3:::::::::10
::1:1:2::::2:5::2:1:7:4:300:300:10:10:130:9:4:300:120
::5:5::::5:5:10::10:::9:600:::400:50:::300:250
1:5:2:2:2:1:1:1:1:8::2:2:12:2:100:50:15:8:5:5:2:22:7
::3::1::1:1::20:::1:1:6:300:50:50:450:15:125:125:30:130:::::::::10::::2
1:2:5:2:20:0.5::0.5:5:2:2:2:2:5:1:500:500:::12:50:2:12
:15:20:1::::0.1:0.1::0.1::0.1:5:5:300::::35:400:2
5:4:2:2:2:2:1:3:5:2:3:2:1:20:2:100:30:2:10:4:20:20:20:3
:2:1:0.5:5:::1:2:1:1.5:2:0.5:20:1:0.125:2::4:2:40::3:0.5:::::::::3.5
4::2:2:2:1::1:2:1:2:2:1:16:1:50:20:2:8:3:2:5:6:3:::::::::::::2:::::::::::2
:2:12:1:1:::2:2:3:4:12:1:4:3:60:4::30::35:5::10
::16::::6:6:14::::8::9::230:::12:200::65:60
4:10:1::8::0.5:1.5:3::2::0.5:0.5:1:80:20:25::50::300:10:2:::::::::::::::::5
:5:10:5::::5:5::15::5:2:40::1000:500:45000:300
2:2:10:1:2:0.5::3:5:5:1:1:1:10:3:130:10::110:11::12:35
3.2:12:2:4:2:0.8:1.2:1.6:0.8:2:2:0.8:0.8:4:6:2000::40:600:12:1500:500:10:200:::::::::::::::::::::::::::::4
:2:4:2:2::0.5:8:0.5:0.5:2:::10:1:75:25:::2:6000:2:7:10:::::::::::1:::::::::::::2:0.5::::10
12:3:1:2:1:0.1::2:2:2:1:2:1:3:2:250:130::2:7:::6:::::::5:::::3::::::::::::3
:2:8:4:3:::1:5::4:3:2:8:3::::40:5:2:150:10:50:::::::::3::::::::::::2
3:1:1:2:7:2:1:4:2::2:3:2:4:2:150:20:2:3:3:::14:8::::::::::4:::::::::::::::::4::4
:8::2:2:::8::::10:1:2:8:::::20:::10:::::::::::::::::::::::::7:::::4
0.5:5:5:2:2:::10:5::1:2:1:5:1.5:35::2:33::10:20::20::::::::::::::::::::::::::::::10
::::2:::32::::::6:15:250:160::8:30:20:450:30
:1:1:2:5:1::5:2::1:3:1:18:6:1000::12:150:10:400:8000:10:10
2.5:5::2.5:2.5:::2.5:2.5:15::10::2.5:16:200:160::5:30:20:400:18::::::::::::::::5::::10:::::::::::5
2:1:0.5::0.5:0.5::0.5:1:5:0.5:1:0.5:27:1:40:20::12:2:60:5:4:::::::::::::2
:1::1:3:1::1:1::1:2:1:15:8:800:200:10:50:40:1000:10:150:50:::::::::::::::::::7:::::5:::::10
::::0.5:::::2::0.5:2:27:8:800:::10:2:20:20:40:10:::::::::8
2:2:0.5:1.5:3:0.25::5:2:2:0.5:1:2:20:2:120:100:50::6:10::36:40:::::::0.25:::::::::::::::::5::::::::4
:3:3:3:::2::5::2:5:2:10:5:250:200:30:50:20:500:500:4:10
:0.5::0.5:6:0.5::10:2:::3:1.5:5:1:30::::1:::13::::::::::::::::::::::5:::5:1
2.5:0.2:0.1:0.02:0.5:0.01:0:1:1:4:0.2:0.5:0.5:2:4.1:39::40::3:::10:::0.5::::2:::0.5:::::::3:::4:::::3
1:3::1:5::2:2:1:::5::10:1:45:25:8:2:2:1:1:20:4:::::::::7:::::::::::::::4
SHAR_EOF
chmod 0664 data ||
echo 'restore of data failed'
Wc_c="`wc -c < 'data'`"
test 9181 -eq "$Wc_c" ||
echo 'data: original size 9181, current size' "$Wc_c"
fi
# ============= titles ==============
if test -f 'titles' -a X"$1" != X"-c"; then
echo 'x - skipping titles (File already exists)'
else
echo 'x - extracting titles (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'titles' &&
BU Backups
INST H/W Install/Configure
NETM Network Management
HW Hardware
SW Non-system Software
REST Restores
YP Yellow Pages/NIS
APP Applications
DSK Disk management
MGMD Managing Subordinates
NETH Network Hardware
SYSW System Software
PERF Performance
USER Dealing with users
ADM Number of sysadmins
NUSR Number of FTE Users
DATW Dataless Workstations
DSKW Diskless Workstations
FULW Dataful Workstations
SERV Servers
PC PCs
MAC Macs
SGB Server GB
WGB Workstations GB
XXTRM X-Terminals
MON Monitoring
TEST Testing
FTP FTP'ing files
DB DB maintenance
MGMU Upper Management
BIND Bind
UUCP UUCP
MISC Miscellaneous
POL Policy issues
GROW Personal Growth
ORDR Ordering
VEND Dealing with Vendors
PUBR Public Relations
PLAN Planning
DOC Documentation
SNDM Sendmail
DEMO Demonstrations
READ Reading
PRNT Printers
MAIL EMail
TRAV Travel
PROP Proposal writing
MEET Meetings
PW Passwd file maint.
STAF Staff issues
SEC Security
PROB Problem Solving
DEV SW Development
EVAL Evaluating products
NEWS Reading news
CSS Customer service functions
SHAR_EOF
chmod 0664 titles ||
echo 'restore of titles failed'
Wc_c="`wc -c < 'titles'`"
test 1035 -eq "$Wc_c" ||
echo 'titles: original size 1035, current size' "$Wc_c"
fi
# ============= get.perl ==============
if test -f 'get.perl' -a X"$1" != X"-c"; then
echo 'x - skipping get.perl (File already exists)'
else
echo 'x - extracting get.perl (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'get.perl' &&
#!/bin/perl
X
open (IN, "data") || die "Can't open data";
$i = 0;
chop($in = );
foreach (split (/:/, $in)) { $col{$_} = $i++; }
X
die "Need arguments" if $#ARGV < 0;
X
open (TIT, "titles") || die "Can't open titles";
# BU Backups
while () {
X chop;
X split(/\t/, $_, 2);
X die "Invalid title fieldname --$_[0]--" if !defined($col{$_[0]});
X $tit{$_[0]} = $_[1];
}
close (TIT);
X
@gets = @ARGV;
foreach (@gets) {
X die "Invalid field name `$_'" if ($col{$_} eq "");
X push (@fieldnums, $col{$_});
}
X
$first = 1;
foreach (@gets) {
X print "$tit{$_}" if $first;
X print ":$tit{$_}" if !$first;
X $first = 0;
}
print "\n";
X
$# = "%.2g";
$" = ":";
X
while () {
X chop;
X @a = (split (/:/))[@fieldnums];
X $sum = 0;
X grep (($sum += ($_ eq "" ? $_ += 0 : $_)), @a);
X if ($sum > 0) { print "@a"; print "\n"; }
}
close (IN);
SHAR_EOF
chmod 0775 get.perl ||
echo 'restore of get.perl failed'
Wc_c="`wc -c < 'get.perl'`"
test 842 -eq "$Wc_c" ||
echo 'get.perl: original size 842, current size' "$Wc_c"
fi
# ============= hist.perl ==============
if test -f 'hist.perl' -a X"$1" != X"-c"; then
echo 'x - skipping hist.perl (File already exists)'
else
echo 'x - extracting hist.perl (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'hist.perl' &&
#!/bin/perl
# read in a title then some numbers then build a histogram
X
chop($tit = <>);
print STDERR "Working on $tit...\n";
X
while (<>) { chop; push (@data, $_); $sum += $_; $n++;}
X
sub numerically { $a <=> $b; }
X
@data = sort numerically @data;
X
$# = "%.3g";
# note that this is the mean of the nonzero items -- not of all items
print "$#data items; $data[0] -> $data[$#data]; mean = ", $sum/$n, "\n";
X
$lower = $data[0];
if ($lower >= 0.0 && $lower < 0.4) { $lower = 0.0; }
$range = $data[$#data] - $lower + 0.0005;
#what if range is 0.0 ???
X
$nbuckets = 15;
if ($range > 5 && $range < 20) { $nbuckets = $range; }
X
foreach (0..$nbuckets-1) { $bucket[$_] = 0; }
foreach (@data) { $bucket[ int (($_-$lower)/$range * $nbuckets) ] ++; }
X
$max = $bucket[0];
grep (($_ > $max? $max = $_:0),@bucket);
print "Max bucket is $max; \$\#bucket is $#bucket\n";
X
X
$lead = " ";
$height = 15;
for ($i = $height-1; $i >= 0; $i--)
{
X $lim = $i/$height*$max;
X print $lead;
X foreach (0..$#bucket) {
X printf " %.1s ", $bucket[$_] > $lim ? "**" : " ";
X }
X print "\n";
}
X
X
$# = "%4d";
X
print $lead;
foreach (@bucket) { printf ("%2d|", $_); } printf ("\n");
X
$# = "%g";
foreach (0..$nbuckets+1) { printf ("%2d/", $_/$nbuckets*$range+$lower); }
print "\n";
X
print " " x ((3 * $#bucket - length ($tit))/2), "--> $tit <--\n";
print "-" x 78, "\n";
SHAR_EOF
chmod 0775 hist.perl ||
echo 'restore of hist.perl failed'
Wc_c="`wc -c < 'hist.perl'`"
test 1328 -eq "$Wc_c" ||
echo 'hist.perl: original size 1328, current size' "$Wc_c"
fi
# ============= table.perl ==============
if test -f 'table.perl' -a X"$1" != X"-c"; then
echo 'x - skipping table.perl (File already exists)'
else
echo 'x - extracting table.perl (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'table.perl' &&
#!/bin/perl
X
# get names of categories
open (IN, "data") || die "Can't open data";
chop($in = );
foreach (split (/:/, $in)) { push (@cats, $_); }
X
# get extended titles
# BU Backups
open (TIT, "titles") || die "Can't open titles";
while () {
X chop;
X split(/\t/, $_, 2);
X $tit{$_[0]} = $_[1];
}
close (TIT);
X
# read and tabulate the data
$n = 0;
while () {
X print STDERR "x";
X chop;
X @a = split (/:/);
X for (0..$#cats) {
X $x = $a[$_] + 0; # converts to number
X $var = $cats[$_];
X if ($x > 0 ) {eval "\$$var+=$x;";}
X $x = int ($x+0.99); # truncates-up
X if ($x >= 10) {$x = 10;}
X eval "\$$var\[\$x]++;";
X }
# if ($n > 20) { last; } # for faster debugging
X $n++;
}
close (IN);
print STDERR "\n";
X
print " 0 <=1 <=2 <=3 <=4 <=5 <=6 <=7 <=9 <=10 >10 AVG\n";
foreach $t (@cats) {
X for (0..10) {
X eval "\$x=\$$t\[$_];";
X printf ("%3d ", $x);
X }
X eval "\$avg=\$$t/$n";
X printf "%4.1f %s\n", $avg, $tit{$t};
}
SHAR_EOF
chmod 0775 table.perl ||
echo 'restore of table.perl failed'
Wc_c="`wc -c < 'table.perl'`"
test 970 -eq "$Wc_c" ||
echo 'table.perl: original size 970, current size' "$Wc_c"
fi
exit 0
--
/\ Rob Kolstad Berkeley Software Design, Inc.
/\/ \ kols...@bsdi.com 7759 Delmonico Drive
/ / \ 719-593-9445 Colorado Springs, CO 80919
|