сортировка файловой базы по ключу и группе по датацентру - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть такой файл key=value, и я хочу отсортировать его по ключу в порядке возрастания.У меня есть два типа машин - один в центре обработки данных abc и другой в центре обработки данных pqr.

p10=machineA.abc.host.com
p7=machineB.abc.host.com
p3=machineC.abc.host.com
p8=machineD.abc.host.com
p10=machineE.pqr.host.com
p7=machineF.pqr.host.com
p3=machineG.pqr.host.com
p8=machineH.pqr.host.com

Так что у меня должна быть что-то вроде этой распечатанной группы по центру данных и отсортированной по возрастанию по ключу.Можно ли это сделать случайно?

p3=machineC.abc.host.com
p7=machineB.abc.host.com
p8=machineD.abc.host.com
p10=machineA.abc.host.com

p3=machineG.pqr.host.com
p7=machineF.pqr.host.com
p8=machineH.pqr.host.com
p10=machineE.pqr.host.com

Я пытался sort -n machines.txt, но я не так хочу.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы можете сделать

sed 's/.\(.*\)/\1/g' inputfile | sort -t. -k2 -k1,1n | sed 's/^/p/g'

Это установит . в качестве разделителя полей.Затем он будет сортировать по тексту второе поле (-k2), а затем численно сортировать первое поле (-k1).

0 голосов
/ 26 апреля 2018

sort + awk решение:

sort -t'.' -k2 -k1,1V file | awk 'BEGIN{ FS=OFS="." }dc && $2 != dc{ print "" }{ dc = $2 }1'
  • -t'.' - разделитель полей
  • -k2 - сортировка по датацентру по названию на 1-м этапе
  • -k1,1V - естественная сортировка ключей

Обновление :

С учетом имени центра данных в качестве 3-го поля с конца:

awk -F'[=.]' '{ $0 = $1 OFS $(NF-2) OFS $0 }1' machines.txt \
| sort -k2,2 -k1,1V \
| awk 'BEGIN{ FS=OFS="." }{ sub(/^[^ ]+ [^ ]+ /, "") }dc && $2 != dc{ print "" }{ dc = $2 }1'

Вывод:

p3=machineC.abc.host.com
p7=machineB.abc.host.com
p8=machineD.abc.host.com
p10=machineA.abc.host.com

p3=machineG.pqr.host.com
p7=machineF.pqr.host.com
p8=machineH.pqr.host.com
p10=machineE.pqr.host.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...