Code:
BEGIN {
qq="\""
FS=qq
OFS=","
fldL="ffid,LineNumber,PointNumber,x,y,z,date,Valid,AcquisitionLength,AcquisitionNumber,FileDate,FileSize,GPSTimeOfAcquisition,JulianDay,NumberOfAuxes,NumberOfDeadSeisTraces,NumberOfLiveSeisTraces,NumberOfSeisTraces,RecordLength,SampleRate,SourceEasting,SourceNorthing,SourceLineNumber,SourcePointNumber,SwathName,TapeNumber,SweepLength,TestRecordType,TotalNumberOfTraces,TypeOfSource,PointIndex,preEasting,preNorthing,postEasting,postNorthing,offset,cogStatus,fleet_nb,VIB1_drive,VIB2_drive,VIB1_vib_status,VIB2_vib_status,VIB1_id,VIB2_id,VIB1_gps_quality,VIB2_gps_quality,VIB1_over_mass,VIB2_over_mass,VIB1_dist_avg,VIB2_dist_avg,VIB1_dist_peak,VIB2_dist_peak"
fldN=split(fldL, fldT, OFS)
for(i=1; i in fldT; i++)
fldA[fldT[i]]=i
print fldL
}
function arrayFull(a, i)
{
for(i=1; i<= fldN; i++)
if (!(i in a))
return 0
return 1
}
arrayFull(outputA) {
for(i=1; i in outputA; i++)
printf("%s%s", outputA[i], (i==fldN)?ORS:OFS)
split("", outputA)
}
$2 in fldA { outputA[fldA[$2]]=$(NF-1) }