регулярное выражение для группировки с одинаковым именем

enter image description here

Uniq -опция f поможет вам проверить

0
17.03.2020, 17:16
2 ответа
awk -F: '/^$/{next}$1!=f&&NR>1{print ""}{f=$1;print;}' foo.txt

дает

aaa:6600 location: US
aaa:6622 location: US

xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU

ggg:7701 location: KR
ggg:8808 location: KR

на выборочных данных.

Объяснение.

-F:говорит, что поля будут разделены двоеточием. /^$/{next}говорит пропускать все пустые строки во вводе. $1!=f&&NR>1{print ""}если текущее имя не совпадает с именем объекта, сохраненным в f, а номер строки в файле больше 1, то напечатайте пустую строку, чтобы начать новую группу. {f=$1;print}для всех строк сохраните имя в fи напечатайте строку. Есть способы сделать его короче, но для меня это не требует ничего, кроме основного awk.

2
28.04.2021, 23:20
$ awk -F':' '!NF{next} $1 != prev{if (NR>1) print ""; prev=$1} 1' file
aaa:6600 location: US
aaa:6622 location: US

xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU

ggg:7701 location: KR
ggg:8808 location: KR
2
28.04.2021, 23:20

Теги

Похожие вопросы