awk '!a[$1]{b[++p]=$1; a[$1]=$2;next} {a[$1]=sprintf("%s%s%s", a[$1], OFS, $2)} END {for (i=1; i<=p; i++) print b[i], a[b[i]]}' file
на основе этого поста как группировать строки в соответствии с первым полем/элементом
curl http://webpage.example.com/status |\
grep -oP '<div class="stats-values">.*?</div>' |\
grep -oP '(?<=<span>)\[.*?\](?=</span>)'
сначала grep
извлечь связанный блок <div...></div>
;
второй grep
извлекает числовые части во внутренних блоках <span>[...]</span>
.
(?<=pattern)
является PCRE-позитивным -расширением просмотра назад для GNU grep
мы разрешили использовать его с переключателем -P
. (?=pattern)
является расширением положительного просмотра PCRE.
, а это (?<=<span>)\[.*?\](?=</span>)
означает, что наш паттерн [nuerical]
точно находится внутри этих двух паттернов; и они исключаются из вывода и возвращают только шаблон внутри того, который соответствует и найден.
.*
жадное совпадение (самое длинное совпадение ); .*?
не является -жадным (кратчайшим возможным совпадением)