bad awk output on vkernel
YONETANI Tomokazu
qhwt+dfly at les.ath.cx
Tue Aug 18 05:24:23 PDT 2009
On Thu, Aug 13, 2009 at 11:48:18PM -0700, Matthew Dillon wrote:
> Is this with the latest master ? I did fix some pipe bugs last week
> which could very well cause this sort of behavior (where the data gets
> corrupted through the pipe). I'm pretty sure I got all the bugs, there
> shouldn't be any left.
>
> If it isn't that I'll have to try to reproduce it on a test bed and
> then track the issue down.
I'd say it's not a pipe issue, but specific to running awk on vkernel,
because this perl version never produces bad output on vkernel:
my $SUBSEP = "\034";
my $flag = 0;
my @record;
while (<>) {
chomp;
if (/^[ \t]*(;|$)/) {
$flag = 0;
next;
}
if (/^[^ \t]/) {
if ($flag == 0) {
push(@record, $_);
$flag = 1;
}
else {
my $l = @record - 1;
$record[$l] .= $SUBSEP;
$record[$l] .= $_;
}
}
}
foreach (sort @record) {
print $_, "\n";
}
My guess is that awk on vkernel has problem handling an array of long
strings, especially its elements are assigned to in a non-sequential way;
if I commented the line calling sort() function and it greatly reduced
the probability of inconsistent output :)
I also tried gawk from pkgsrc, but it seems to have similar issue.
Probably I need to take a closer look at the source code.
More information about the Kernel
mailing list