Увеличение количества дубликатов в файле

Многие люди до сих пор используют RHEL 5 / CentOS 5 по нескольким причинам. К сожалению, RHEL 5 больше не поддерживается, и, кроме того, никогда не было пакета с OpenSSL >= 1 для RHEL 5.

Если вас не беспокоит использование иностранного репозитория, вы можете использовать репозиторий tuxad.Он предоставляет другой и более простой способ обновить OpenSSL RHEL 5 до версии RHEL 6 (, которая все еще поддерживается ):

.

  1. Установить репозиторий tuxad для RHEL 5 :об/мин -ihttp://www.tuxad.de/repo/5/tuxad.rpm
  2. Пакеты обновления :обновление yum

Более подробную информацию можно найти здесь:

www.tuxad.de/blog/archives/2014/11/19/openssl _updateenhancements _для _rhel __centos _5 www.tuxad.de/blog/archives/2018/07/21/tuxad _rh5 _репозиторий _теперь _с _phpopenssl1

Этот репозиторий содержит несколько пакетов, перестроенных для OpenSSL 1:

  • httpd (также включает другие усовершенствования, такие как поддержка ECDH)
  • постфикс
  • голубятня
  • завиток
  • рысь
  • дворняга
  • vsftpd
  • w3m
  • wget
  • PHP
  • php из RHEL 6, портированный (в отдельном репозитории «tuxad -php»)

5
24.07.2020, 10:51
2 ответа
awk '{$1+=seen[$1]++} 1' file

Перед печатью добавить пост -увеличенное хэш-значение к текущему значению $1.

В приведенном выше примере будут повторяться числа, когда значения расположены близко друг к другу, например, последовательность 2,2,3 — результат равен 2,3,3. Для этого можно использовать цикл 2,3,4:

awk '{while (c[$1]) {$1 += c[$1] += c[$1+c[$1]]} c[$1]++} 1'

Массив cхранит смещение, на которое должен быть увеличен $1 (аналогично seenв первом примере ). Вместо того, чтобы увеличивать $1 только на смещение для этого уникального значения, оно также увеличивается на смещение от следующего значения до тех пор, пока не будет достигнут новый ранее невидимый $1.

10
18.03.2021, 23:17

Вариант ответа @guest , который защищает от дублирования на выходе путем увеличения числа, если оно уже было выведено ранее:

awk '{while ($1 in c) $1 += c[$1]++; c[$1]++; print}' file

Или то же самое в perl, обработка чисел везде, где они есть на входе:

perl -pe 's{\d+}{
            $i = $&;
            while (defined($c{$i})) {$i += $c{$i}++}
            $c{$i}++;
            $i
          }ge' file

На входе типа:

1
1
1
5
5
10
10
1
1
1

Дают:

1
2
3
5
6
10
11
4
7
8
3
18.03.2021, 23:17

Теги

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