Используйте 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 рабочими заданиями на каждом процессоре:
GNU Parallel вместо этого порождает новый процесс, когда одна отделка - поддерживая процессор И, таким образом, экономить время:
Установка
Если 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
Это решение использует 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)