#!/bin/bash # Usage: pass lines into stdin; consecutive lines with the same first field (everything up to the first whitespace) will be grouped together on stdout. # Input lines: 'A 1', 'A 2', 'B 3', 'C 4', 'C 5', 'B 6' # Output lines: 'A 1 2', 'B 3', 'C 4 5', 'B 6' # Whitespace within input lines beyond the first whitespace after the prefix is preserved. A single space is used to separate prefix and combined lines. exec awk '($1 != lastPrefix) || (NR == 1) { if (NR != 1) { printf "\n"; } printf "%s", $1; lastPrefix = $1; } { printf " %s", substr($0, index($0, FS) + 1); } END { printf "\n"; }'