Вставьте новую строку после сопоставления некоторого текста в bash - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть файл:

aaaa_bbb_ccc: something
aaaa_ddd_zzz: something
bbbb_ccc_ddd: something
bbbb_ccc_eee: something
bbbb_ddd_eee: something
bbbb_ddd_fff: something
bbbb_eee_ggg: something

Я хочу вставить новую строку, в основном отсортировать по первому слову, а затем сгруппировать по алфавиту по секундам, чтобы получить что-то вроде:

aaaa_bbb_ccc: something

aaaa_ddd_zzz: something

bbbb_ccc_ddd: something
bbbb_ccc_eee: something

bbbb_ddd_eee: something
bbbb_ddd_fff: something

bbbb_eee_ggg: something

Я пробовал awk 'NR>1 && a && substr($1,1,1)!=a{ print "" }{ a=substr($1,1,1) }1', но он вставляется только после первого слова.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

попробуйте этот awk one-liner:

awk -F'_' '{k=$1FS$2}k!=p&&NR>1{print ""}7;{p=k}' file

Это работает для данного примера. Ваш входной файл должен быть отсортирован и не должно быть пустых строк.

0 голосов
/ 03 апреля 2019

Еще один awk, предполагая, что сортированный ввод, как у вас в вопросе

awk -F"_" ' { c=$2;if(c!=p && NR>1) { print "" } print ; p=c; } ' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...