Как сделать так, чтобы пакет Alpine конфликтовал с другим пакетом Alpine?

Вы можете разбить свой SQL на базовые процедурные операции и воспроизвести их в сценарии оболочки.

Это, конечно, не очень хорошая идея, поскольку одно из преимуществ декларативных языков (, таких как SQL ), заключается в том, что они скрывают от разработчиков многословие и сложность процедурной реализации, позволяя им сконцентрироваться на данных. (Оптимизация — второе большое преимущество декларативных языков, которое теряется, если вы копируете их с помощью процедурной программы ).
Кроме того, этот подход проблематичен, потому что обработка текста в циклах оболочки обычно считается плохой практикой .

Тем не менее, вот пример сценария оболочки, который использует стандартные утилиты, которые вы найдете предварительно -установленными на многих системах (, за исключением конструкции массива — не указанной в POSIX, но широко доступной,и, безусловно, доступен для вас, поскольку вы спрашиваете оbash):

#!/bin/bash

# The input file will be passed as the first argument
file="$1"

# For each input line:
# We take only the values of the first field, sort them, remove duplicates
for i in $(cut -d ',' -f 1 "$file" | sort -n -u); do

    # Resetting the array is not really needed; we do it for safety
    out=()

    # The first field of the output row is the key of the loop
    out[0]="$i"

    # We only consider the rows whose first field is equal
    # to the current key (grep) and...

    #... we sort the values of the second field
    # in ascending order and take only the first one
    out[1]="$(grep "^${out[0]}" "$file" | cut -d ',' -f 2 | sort -n | head -n 1)"

    #... we sort the values of the third field in
    # ascending order and take only the last one
    out[2]="$(grep "^${out[0]}" "$file" | cut -d ',' -f 3 | sort -n | tail -n 1)"

    #... we sort the values of the fourth field in
    # ascending order and take only the first one
    out[3]="$(grep "^${out[0]}" "$file" | cut -d ',' -f 4 | sort -n | head -n 1)"

    # Finally we print out the output, separating fields with ','
    printf '%s,%s,%s,%s\n' "${out[@]}"

done

Он должен вызываться как

./script file

Этот скрипт эквивалентен

SELECT col1, MIN(col2), MAX(col3), MIN(col4)
FROM text
GROUP BY col1
ORDER BY col1

1
18.02.2021, 08:14
1 ответ

Чтобы указать, что пакет конфликтует в APKBUILD, можно добавить имя пакета с префиксом '!' зависит (см. ссылку APKBUILD).

depends=".. !perl"

Вы также можете добавить опцию provides:

provides="perl=$pkgver-r$pkgrel"

Это гарантирует, что любые пакеты, зависящие от perl, смогут использовать вместо него этот пакет.

2
18.03.2021, 22:29

Теги

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