[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: config files substitution with awk
From: |
Paul Eggert |
Subject: |
Re: config files substitution with awk |
Date: |
Mon, 04 Dec 2006 22:09:37 -0800 |
User-agent: |
Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) |
address@hidden (Karl Berry) writes:
> But for purposes of explaining to rms, can someone tell me (as briefly
> as possible :) why it is desirable to switch to awk instead of sticking
> with sed?
Speed.
For example, Ralf tested the change with OpenMPI, and switching from
'sed' to 'awk' sped up 'configure' by over a factor of 4. With 'sed',
'configure' took over a minute (user+system CPU time). With 'awk', it
took less than 15 seconds.
The speed comes from awk's hash tables. Here's how to substitute
values for V variables using 'sed':
s/@var1@/val1/
s/@var2@/val2/
...
s/@varV@/valV/
This is O(N**2). With awk, you can do something roughly like this:
nfields = split(line, field, "@")
for (i = 2; i < nfields; i++) {
key = field[i]
if (key in S)
field[i] = S[key]
}
where S[k] gives you the value for key k. This is O(N log N).
The actual code and analysis are more complicated -- among other
things, we're assuming input lines have bounded length, which is the
common practical case -- but here's Ralf Wildenhues's precis:
If you have F config files, each with L lines in which substitutions
apply, and S substituted variables, then the overall work for creating
all config files currently scales roughly as
F * (c1 * (L + S) + c2 * (L * S)) + c3 * S (assuming 'sed')
c1 is larger than c2, but the c2 term causes the most work for large
packages. If you switch from 'sed' to 'awk', this changes to:
F * (c1 * (L + S) + c2 * (L * log (S))) + c3 * S (assuming 'awk')
A longer version of this analysis can be found in
<http://lists.gnu.org/archive/html/autoconf-patches/2006-11/msg00035.html>.
- Re: config files substitution with awk, Ralf Wildenhues, 2006/12/03
- Re: config files substitution with awk, Paul Eggert, 2006/12/04
- Re: config files substitution with awk, Karl Berry, 2006/12/04
- Re: config files substitution with awk,
Paul Eggert <=
- Message not available
- Re: config files substitution with awk, Pascal Bourguignon, 2006/12/05
- Re: config files substitution with awk, Ralf Wildenhues, 2006/12/05
- Re: config files substitution with awk, Paolo Bonzini, 2006/12/06
- Message not available
- Re: config files substitution with awk, Pascal Bourguignon, 2006/12/06
- Re: config files substitution with awk, Ralf Wildenhues, 2006/12/06