Сортировка и группировка доменов и поддоменов

Yum, похоже, не поддерживает эту возможность. См. Это решение Red Hat .

Yum имеет параметр - installroot , но он предназначен для установки chroot и в основном создает совершенно новую среду, в которой должны быть устранены зависимости.

Что касается rpm , у него есть - переместите OLDPATH = NEWPATH и - префикс NEWPATH , который позволит вам изменить путь установки для отмеченных RPM как перемещаемый , который не будет применяться ко всем пакетам. В общем, это не считается хорошей идеей.

В качестве альтернативы вы можете получить исходный код для rpm и перестроить его самостоятельно, указав желаемый путь.

Я вижу в вашем сообщении ошибку docker , которая может изменить все, что я только что сказал.

2
02.10.2016, 01:13
2 ответа

Как насчет

tr -d [:blank:] < hosts |                           # remove trailing whitespace
perl -lne 'print join ".", reverse(split /\./)' |   # reverse order of fields
sort |                                              # sort
awk -F. '
  !seen[$1.$2.$3]++ && NR>1 {print ""}             # insert blank line when tld,dom,sub change
  {for (i=NF;i>1;i--) printf "%s.", $i; print $1}   # print fields in original order
'

предоставления

bar.foo.com
foofoo.bar.foo.com
morefoo.bar.foo.com

fufu.isub1.foo.com

sub1.foo.com
fufu.sub1.foo.com
morefu.sub1.foo.com

www.foo.com

Лучшей (я надеюсь) реализации того же алгоритма с использованием хешей в perl:

#!/usr/bin/perl

use strict;
use warnings;

my %domains = ();

while (defined($_ = <ARGV>)) {
  chomp $_ ;
  $_ =~ s/\s+//;

  my @F = reverse(split(/\./));
  my $domain = join(".", @F[0..2]);

  if ( ! exists($domains{$domain}) ) {
    $domains{$domain} = {};
  }

  $domains{$domain}{join(".", @F)}++;
}

foreach my $domain (sort keys %domains) {
  foreach my $host (sort keys %{ $domains{$domain} }) {
    print join(".", reverse(split(/\./, $host))), "\n";
  }
  print "\n"
}
3
27.01.2020, 22:04

TXR Lisp:

[(opip (mapcar (op tok-str @1 #/[^.]+/))
       (sort @1 : reverse)
       (partition-by (ret [@1 -3..-1]))
       (mapcar (op mapcar (op cat-str @1 ".")))
       (interpose "")
       tprint)
 (get-lines)]

Run:

$ txr domain-sort.tl < data
bar.foo.com
foofoo.bar.foo.com
morefoo.bar.foo.com

fufu.isub1.foo.com

sub1.foo.com
fufu.sub1.foo.com
morefu.sub1.foo.com

www.foo.com

В основном мы токенизируем строки в списки строк типа ("sub1" "foo" "com") и работаем со списком из них. Мы сортируем этот список, используя в качестве ключа обратную сторону его элементов; поэтому для целей сортировки ("sub1" "foo" "com") рассматривается так, как если бы это было ("com" "sub1" "foo"). После этого речь идет о группировке. Это легко достигается с помощью partition-by, используя последние три элемента в качестве ключа разбиения. Мы должны воссоздать строки, соединив их точкой, и напечатать группы с линиями. Последнее достигается путем вставки пустой строки между группами и предоставления tprint выполнения своей работы.

0
27.01.2020, 22:04

Теги

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