sed - удалить все цифры перед каждым экземпляром точки

Мне нравятся пробелы и описательные имена переменных.Что тут еще можно сказать? Прошло много времени с тех пор, как я написал много awk , я даже забыл о -f на шебанге. Однако, делая это, я действительно чувствовал себя в дзен. Код хайку.

Мне нравится это решение, потому что в нем минимум закодированной логики. Всего два цикла for, перебирающих индексы массива. Нет трехэтапного пошагового выполнения для циклов, нет операторов if , нет явных сравнений значений. Все эти вещи статистически коррелируют с программными дефектами (ошибками). Интересно, что здесь нет явных присваиваний, а только одна математическая операция - приращение счетчика. Думаю, все это говорит о максимальном использовании языковых возможностей.

Мне кажется, что чего-то не хватает, но я еще не смог найти в этом никаких дыр.

Прокомментируйте, пожалуйста. Запрошены мнения и конструктивная критика. Я хотел бы услышать о соображениях производительности этого скрипта.

#!/usr/bin/awk -f

function count(seen, unique_count) {
    for (ij in seen) {
        split(ij, fields, SUBSEP)
        ++unique_count[fields[1]]
    }
}

{
    seen2[$1,$2]
    seen3[$1,$3]
}

END {
    count(seen2, count2)
    count(seen3, count3)
    for (i in count3) {
        print i, count2[i], count3[i]
    }
}

Аннотация

Я полагаю, что одной из уникальных особенностей этого скрипта является то, что массивы seen2 и seen3 не содержат данных, только индексы. Это потому, что мы подсчитываем только уникальные значения, поэтому единственное, что имеет значение, - это то, что значения были просмотрены, нас не волнует, сколько раз они встречаются.

#!/usr/bin/awk -f

Функция count принимает массив seen , индексированный двумя значениями полей, встречающихся во входных записях, либо полях 1 и 2, либо полях 1 и 3, и возвращает массив. внутренне вызываемый unique_count , индексированный первым полем, содержащий счетчики уникальных значений поля для столбца, накопленные вторым индексом:

function count(seen, unique_count) {

Функция count выполняет итерацию по индексам массива замечено :

    for (ij in seen) {

Разделяет индекс на два исходных значения, поле 1 и либо поле 2, либо поле 3:

        split(ij, fields, SUBSEP)

Увеличивает счетчик для элемента, индексированного полем 1:

        ++unique_count[fields[1]]
    }
}

При каждом вводе встречается строка, мы создаем пустой элемент массива, если он еще не существует, индексируемый первым полем, а также вторым или третьим полем. Сохраните отдельный массив ( visible2 и seen3 ) для каждого номера поля, которое подсчитывается. Для каждого уникального значения в данном столбце (2 или 3) будет только один элемент массива:

{
    seen2[$1,$2]
    seen3[$1,$3]
}

В конце данных подсчитайте количество уникальных полей, видимых для каждого столбца:

END {

Передайте массивы, накопленные из введите в функцию count и получите count2 или count3 , заполненные уникальными счетчиками полей.

    count(seen2, count2)
    count(seen3, count3)

Пройдите через любой из массивов count2 или count3 (неважно, какой из них, поскольку все они имеют первое поле каждой строки) и распечатайте первое поле, а затем количество уникальных значений, найденных для каждой строки, содержащей первое поле:

    for (i in count3) {
        print i, count2[i], count3[i]
    }
}

Однострочная версия

awk 'function c(s,u){for(x in s){split(x,f,SUBSEP); ++u[f[1]];}}
 {a[$1,$2]; b[$1,$3];} END {c(a,d); c(b,e); for(i in d){print i,d[i],e[i];}}'
3
05.06.2018, 10:53
2 ответа

Resulta que Perl-IPC-Runestá en el repositorio rhel-7-server-optional-rpmsque no había sido habilitado.

Estos son los pasos que tomé para solucionar el problema:

# subscription-manager repos --enable=rhel-7-server-optional-rpms
Repository 'rhel-7-server-optional-rpms' is enabled for this system.
# yum search Perl-IPC-Run
...
perl-IPC-Run.noarch : Perl module for interacting with child processes

Ahora el paquete Perl-IPC-Runestá disponible y moreutilsse instala sin errores.

5
27.01.2020, 21:21

Я скачал perl -IPC -Выполнить -0.84 -2.el6.rfx.noarch и проблема была исправленаhttp://rpmfind.net/linux/rpm2html/search.php?query=perl-IPC-Run

-1
27.01.2020, 21:21

Теги

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