# Assumes a tab delimited flat file and the first field being a numeric key BEGIN { FS = OFS = "\t"; p = ""; } # Strategy is to readline, check for key in first field, store to print # on next readline if the next record has a key in first field, otherwise # append our fragmented line to the stored line { sub(/\r/,""); # also scrub those pesky carriage returns if( $1 ~ /^[0-9]+$/ ) { if( p != "" ) { sub(/^\s+/,"",p); print p; p = ""; } p = $0 } else { p = p " " $0; } } END { print p }