Как перебрать строки и добавить добавочный номер к дубликатам? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть среда из нескольких сотен автоматически масштабируемых серверов и файл хоста сервера, который генерируется каждые несколько минут, с строкой на сервер с 3 столбцами:

например.

10.10.1.2 video-server-usa-01 vs-usa-01
10.10.1.3 video-server-jap-01 vs-jap-01
10.10.1.4 upload-server upload
10.10.1.5 upload-server upload
10.10.1.6 upload-server upload
10.10.1.7 editing-server edit
10.10.1.8 editing-server edit
10.10.1.9 data-storage-server-01 data-01

также, список случайный и несортированный.

довольно простой env, так что вы не хотите чрезмерно проектировать проблему с причудливым самоотчетным днс или чем-то еще при загрузке или завершении. к ним редко обращаются, но если это так, то с помощью перемычки просто нужно, чтобы на этом сервере всегда была правильная информация о хосте и короткие теговые имена для легкого подключения

серверы, которые всегда единичны, имеют номер в конце. серверы без номера все время увеличиваются и уменьшаются, и это проблемные, потому что все они помечены одним и тем же именем.

необходимо отсортировать строки, а затем игнорировать любую строку, заканчивающуюся цифрой, а для любой другой строки, в которой в 3-м столбце нет номера и имеются повторяющиеся результаты, им нужно увеличить число и добавить в конец.

например. конечный результат:

10.10.1.2 video-server-usa-01 vs-usa-01
10.10.1.3 video-server-jap-01 vs-jap-01
10.10.1.4 upload-server upload-01
10.10.1.5 upload-server upload-02
10.10.1.6 upload-server upload-03
10.10.1.7 editing-server edit-01
10.10.1.8 editing-server edit-02
10.10.1.9 data-storage-server-01 data-01

1 Ответ

0 голосов
/ 16 ноября 2018

Проверьте это:

$ cat genie1.txt
10.10.1.2 video-server-usa-01 vs-usa-01
10.10.1.8 editing-server edit
10.10.1.6 upload-server upload
10.10.1.3 video-server-jap-01 vs-jap-01
10.10.1.4 upload-server upload
10.10.1.5 upload-server upload
10.10.1.9 data-storage-server-01 data-01
10.10.1.7 editing-server edit

$ sort -k2,3 -k1 -n genie1.txt | perl -F"\s+" -lane ' { if( /(.+?)(?<![0-9])$/) {$k="$F[1] $F[2]";$col3{$k}++; printf("%s %s %s-%02d\n",$F[0],$F[1],$F[2],$col3{$k}) }
else {print} } '
10.10.1.2 video-server-usa-01 vs-usa-01
10.10.1.3 video-server-jap-01 vs-jap-01
10.10.1.4 upload-server upload-01
10.10.1.5 upload-server upload-02
10.10.1.6 upload-server upload-03
10.10.1.7 editing-server edit-01
10.10.1.8 editing-server edit-02
10.10.1.9 data-storage-server-01 data-01

$
...