grep и печать весь шаблон в одной полосе

Используйте GNU Parallel для параллелизма вашей коллекции:

parallel --slf rhel-nodes --tag --timeout 1000% --onall --retries 3 \
  "rpm -q {}; rpm --queryformat '%{installtime:date} %{name}\n' -q {}" \
  ::: bash bc perl

Поместите узлы в ~ / .parallel / Rheel-узлы .

- Tag получит вывод с именем узла. - Тайм-аут 1000% говорит, что если команда занимает в 10 раз больше, чем Median, чтобы запустить, она будет убита. - Onall будет запустить все команды на всех серверах. - Retribe 3 запустит команду до 3 раза, если она не удастся. ::: Bash BC Perl - это пакеты, на которые вы хотите проверить. Если у вас есть много пакетов, используйте пакеты CAT | Параллель ... Синтаксис вместо Параллельные ... ::: Пакеты .

GNU Parallel - это общий параллелизатор, и позволяет легко запускать задания параллельно на той же машине или на нескольких машинах, к которым у вас есть SSH.

Если у вас есть 32 различных рабочих заданий, которые вы хотите запустить на 4 процессорах, прямой путь для параллелизма - это управлять 8 рабочими заданиями на каждом процессоре:

Simple scheduling

GNU Parallel вместо этого порождает новый процесс, когда одна отделка - поддерживая процессор И, таким образом, экономить время:

GNU Parallel scheduling

Установка

Если GNU Parallel не упакован для вашего распространения, вы можете сделать личную установку, что не требует доступа к корню. Это может быть сделано за 10 секунд, делая это:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

для других вариантов установки см. http://git.savannah.gnu.org/cgit/parallel.git/tree/readme

Узнать больше

Увидеть больше примеров: http://www.gnu.org/software/parallel/man.html

Смотреть видео в Intro: https://www.youtube.com/playlist?list= PL284C9FF2488BC6D1

Прогулка по учебнику: http://www.gnu.org/software/parallel/parallel_tutorial.html

Зарегистрируйтесь на списке электронных напитков, чтобы получить поддержку: HTTPS: // списки .gnu.org / mailman / listinfo / parallel

-1
26.02.2015, 20:40
1 ответ

Это решение использует awk . Мы передам оба имена файлов в качестве аргументов, и используем , если (FnR == NR) IDIOM, чтобы сделать что-то другое в зависимости от того, читаем ли мы первый или второй файл. Мы будем использовать ассоциативные массивы для хранения клавиш и выходных линий.

Это файл A.awk :

# usage: awk -f a.awk keyfile1 datafile2
BEGIN {
    FS = "\t"                               # set field separator to TAB
}
{
    if (FNR == NR) {                        # if looking at first (key) file
        k[$1]=$1                            # just save each key
    } else {                                # if looking at second file
        if ($1 in k) {                      # if first col is one that we want
            output=$1 "_" $2                # prepare output line
            if (out[$1]=="")                # if first time we've seen this key
                out[$1]=output              # store output as is
            else                            # and when we find more matches for this key
                out[$1]=out[$1] ";" output  # we append ";" and the output
        }
    }
}
END {                                       # at the end
    for (i in out)                          # print all the output lines
        print out[i]
}

А вот как его использовать:

$ awk -f a.awk file1 file2
K00001_ko00010_Glycolysis__Gluconeogenesis;K00001_ko00020_Citrate_cycle_(TCA_cycle)
K00003_ko00010_Glycolysis__Gluconeogenesis;K00003_ko00020_Citrate_cycle_(TCA_cycle)
K00005_ko00010_Glycolysis__Gluconeogenesis;K00005_ko00020_Citrate_cycle_(TCA_cycle)
2
28.01.2020, 05:09

Теги

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