AWK и массивы — более конкретный пример

Вероятно, ближе к установщику MSI, чем setup.exe, пакет .deb включает в себя дерево файлов для копирования в файловая система, а также набор хуков до и после установки для запуска (среди прочего). Перехватчики могут эффективно делать что угодно в системе, включая то, что я не думаю, что когда-либо видел в Windows: добавление пользователей для системной службы. Одна вещь, которую они не могут сделать, это установить другую .пакет deb — база данных заблокирована во время установки, поэтому этого можно добиться только через зависимости. После установки пакета .deb создаются записи в центральной базе данных установленных пакетов для простоты обслуживания.

Пакет ttf-mscorefonts интересен тем, что сам пакет содержит только скрипт для загрузки и установки шрифтов. Этот скрипт выполняется в одном из этих хуков.

Ближе к setup.exe может быть загрузка исходного кода программы с домашней страницы проекта, а затем запуск ./configure && make && sudo make install или любой другой метод, предложенный авторами. решил использовать. Так как этот способ не добавляет пакет в базу установленных программ, удалить его потом может быть гораздо сложнее.

Еще одно отличие состоит в том, что файл .deb указывает свои зависимости, поэтому правильная установка может быть гарантирована. Насколько мне известно, в мире Windows MSI не может вызвать установку другого MSI, поэтому setup.exe обычно используется для такого отслеживания зависимостей. В нескольких комментариях отмечается, что MSI могут называть зависимости, но поскольку нет центральной базы данных MSI, как для пакетов .deb, отсутствие зависимости просто приведет к сбою установки.

Таким образом, .deb является чем-то средним между установщиком MSI и setup.exe.Пакет может делать все, что захочет, во время своих перехватчиков до и после установки, может называть и обычно находить свои собственные зависимости и оставляет запись о своей установке в центральном месте для простоты обслуживания.

1
10.06.2019, 16:01
3 ответа

Я бы обработал входной файл дважды :один раз для подсчета вхождений пар город+код и один раз для вывода отчета:

awk -F, -v OFS=, '
    FNR == 1 {next}
    NR == FNR {
        for (i=2; i <= NF; i++)
            count[$1,$i]++
        next
    }
    {
        for (i=2; i <= NF; i++)
            print $1, \
                  $i, \
                  (i-1), \
                  (i == 2 ? "Prim" : "Secd"), \
                  count[$1,$i]
    }
' file file
Oxford,X532,1,Prim,2
Oxford,X011,2,Secd,2
Oxford,X989,3,Secd,1
Oxford,X532,1,Prim,2
Oxford,X011,2,Secd,2
Hendon,X002,1,Prim,1
Hendon,X011,2,Secd,1
Hendon,X222,3,Secd,1
Hendon,X769,4,Secd,1
0
28.01.2020, 00:10
BEGIN { 
    FS=","
    OFS=","
}
{
    site=$1
    code[1]=$2
    code[2]=$3
    code[3]=$4
    code[4]=$5    
    key=site

    for (i=1; i<=4; ++i)    {

        cnt=i
        ++recs[i]
        posn=""
        if (cnt==1)     {posn="Prim"}
        else            {posn="Secd"}

        if (code[i] !="")       { myarr[key","code[i]"," posn]++}
                        }
}
END{
    for (i in myarr) {print i","myarr[i]}
}

Результаты:

Hendon,X002,Prim,1
Hendon,X769,Secd,1
Oxford,X011,Secd,2
Hendon,X222,Secd,1
Oxford,X532,Prim,2
Hendon,X011,Secd,1
Oxford,X989,Secd,1
0
28.01.2020, 00:10

Попробуйте это,

awk -F ',' '{for (i=2;i<=NF;i++) { if (i==2) {print $1","$i","i-1",""Prim"}  else print $1","$i","i-1",""Secd"}}' file
Oxford,X532,1,Prim
Oxford,X011,2,Secd
Oxford,X989,3,Secd
Oxford,X532,1,Prim
Oxford,X001,2,Secd
Hendon,X002,1,Prim
Hendon,X011,2,Secd
Hendon,X222,3,Secd
Hendon,X769,4,Secd

Чтобы подвести итог, где коды, которые появляются в той же позиции

ARRAY=(`awk -F ',' '{for (i=2;i<=NF;i++) { if (i==2) {print $1","$i","i-1",""Prim"}  else print $1","$i","i-1",""Secd"}}' file`)
for i in ${ARRAY[@]}
do
    PATTERN=`echo $i | awk -F ',' '{print $2}'`
    COUNT=`echo "${ARRAY[@]}"| tr ' ' '\n' | grep -c $PATTERN `
    echo "$i,$COUNT"
done

Oxford,X532,1,Prim,2
Oxford,X011,2,Secd,2
Oxford,X989,3,Secd,1
Oxford,X532,1,Prim,2
Oxford,X001,2,Secd,1
Hendon,X002,1,Prim,1
Hendon,X011,2,Secd,2
Hendon,X222,3,Secd,1
Hendon,X769,4,Secd,1
0
28.01.2020, 00:10

Теги

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