I recently wrote a little matlab script to do just this. If you don't have matlab, the GPL'd octave or scilab should run it, or spend 5 minutes to get it working in C / bash ...
%% ga_vect2poly.m Hamish Bowman, Nov 11, 2002
%
% Convert GRASS ASCII vector files to GRASS poly files for use with r.in.poly.
%
% v.out.ascii, ga_vect2poly.m, r.in.poly
%
format long g
FileName = '~/grass5_data/milford/bathy/dig_ascii/milf_island_poly'
OutName = [FileName '.poly'];
fp1 = fopen(FileName, 'r');
fp2 = fopen(OutName, 'w');
%% get past header
for i = 1:14
disp(fgetl(fp1))
end
n=0; % island number
while(length(ferror(fp1)) == 0) %% ie not EOF
n = n+1;
buff = fgetl(fp1);
if(buff(1) == 'A')
numVerts = sscanf(buff, 'A %d');
disp(['Island ' num2str(n) ' has ' num2str(numVerts) ' verts.'])
island = fscanf(fp1, '%f %f\n', [2 numVerts])'; % 2 columns, else
disp('eh?? that''s not right:')
disp(buff)
end
fprintf(fp2, 'A\n');
for i = 1:length(island) % note vect ascii is northing,easting
fprintf(fp2, ' %.3f %.3f\n', island(i,2), island(i,1));
end
fprintf(fp2, '= %d\n', n);
end fclose(fp1);
fclose(fp2);