AWK - вопрос о столбцах

Это зависит, в чем точно Вы нуждаетесь и что Вы ищете. Но в целом там существует несколько решений для "управления конфигурацией как:

  1. марионетка
  2. шеф-повар
  3. cfengine
  4. ansible
  5. соль

и т.д. Я лично рекомендовал бы марионетке, поскольку это имеет многочисленное сообщество и много внешних предоставленных рецептов. Это позволяет Вам настраивать и управлять системами автоматически. Если Вы комбинируете это с собственными репозиториями и автоматизированными обновлениями через, например. unattended-upgrades можно автоматически обновить систему.

Другое решение состоит в том, чтобы только обеспечить Ваши собственные пакеты как company-base и т.д., который автоматически зависит от необходимого программного обеспечения и может настроить Вашу систему автоматически.

Необходимо также изучить, автоматизирует развертывание (скелет и виртуализированный). При объединении этого с управлением конфигурацией или собственным репозиторием, можно легко автоматизировать и переустановить системы. Если Вы хотите начать с автоматической установкой, взглянули на theforman, который поддерживает libvirt, а также пустые установки кости и интегрировал марионеточную поддержку. Если Вы хотите, действительно делают это сами, можно изучить, запускают (Redhat и. al.) или "предварительный отбор" для автоматического конфигурирования системы. Для Debian можно также использовать что-то как debootstrap или обертка, названная grml-debootstrap поддержка виртуализированных изображений.

Для помощи обеспечению изображений VirtualBox для разработчика взглянули на бродягу, оно позволяет Вам автоматизировать создание виртуализированных систем с VirtualBox, поддерживающим шеф-повара, марионеточные и сценарии оболочки для настройки виртуальной среды.

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

Для Google ключевые слова изучают devops, configuration management, it automation и server orchestration.

Короче говоря автоматизируйте как можно больше и даже не думайте о выполнении руководства материала.

5
05.06.2013, 17:48
2 ответа

Это работает в одной передаче через файл и не должно хранить целый файл в памяти. Это действительно сохраняет открытые дескрипторы файлов для каждого целевого файла.

awk -F '\t' '
    NR==FNR {population[$1]=$2; next}
    FNR==1 {
        for (i=1; i<=NF; i++) {
            destination[i] = population[$i] ".txt"
        }
    }
    {
        delete separator
        for (i=1; i<=NF; i++) {
            printf "%s%s", separator[destination[i]], $i > destination[i]
            separator[destination[i]] = FS
        }
        for (file in separator) {
            printf "\n" > file
        }
    }
' populations.txt database.txt
7
27.01.2020, 20:35

Я полагаю, что это не лучший способ, поскольку мы должны прочитать database.txt столько же время сколько регионы, которые мы имеем плюс один. К сожалению, другой путь не сделал прибыл по моему мнению.

  1. Транспонируйте database.txt:

    awk '{для (i=1; я <=NF; я ++) {[НОМЕР, я] = $i }} NF> p {p=NF} КОНЕЦ {для (j=1; j <=p; j ++) {str=a [1, j]; для (i=2; я <=NR; я ++) {str=str" "[я, j];} печатают ул. }}' database.txt> database.tmp

более читаемый (та же команда):

awk '
{ 
    for (i=1; i<=NF; i++)  {
        a[NR,i] = $i
    }
}
NF>p { p = NF }
END {    
    for(j=1; j<=p; j++) {
        str=a[1,j]
        for(i=2; i<=NR; i++){
            str=str" "a[i,j];
        }
        print str
    }
}' database.txt > database.tmp

2. считайте файл с идентификаторами и grep все идентификаторы от транспонированного database.tmp:

while read id region ; do grep -m 1 $id database.tmp >> $region.txt.tmp ; done < population.txt

3. транспонируйте весь region.txt.tmp файл к форме, в которой Вы нуждаетесь:

for region_file in *txt.tmp ; do awk '{for(i=1;i<=NF;i++){a[NR,i]=$i}}NF>p{p=NF}END{for(j=1;j<=p;j++){str=a[1,j];for(i=2;i<=NR;i++){str=str" "a[i,j];}print str}}' $region_file > ${region_file%.tmp} ; done

4. удалите все временно файлы

3
27.01.2020, 20:35

Теги

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