Я запускаю поиск и редактирование программы. Сейчас у меня есть файл с уникальным идентификатором в первом столбце и данными в 10-м и 11-м столбцах, которые необходимо исправить. Этот файл имеет около 40-100M строк. Файл с правильной информацией имеет в 4 раза больше строк и находится в формате, где он повторяется каждые 4 строки, причем строка 1n имеет идентификатор, строка 2 имеет правильные данные для столбца 10, а строка 4 имеет правильные данные для столбца 11. У меня есть две программы, одна из которых разбивает файл 1 на 250000 фрагментов строки и параллельно запускает следующую программу на нескольких ядрах.Как ускорить свою программу
#! /bin/bash
#$ -l h_rt=01:00:00,vf=1G
#$ -pe smp 1
#$ -cwd
#$ -j y
#$ -N unmasked
#$ -V
for line in `cut -f 1 $1`; do
seq=`awk -v a="$line" '$1~a{getline;print;exit}' ../406.fastq`
qual=`awk -v a="$line" '$1~a{getline;getline;getline;print;exit}' ../406.fastq`
awk -v s="$seq" -v q="$qual" -v l="$line" 'FS="\t" {if ($1~l) {$10=s;$11=q; print $0}}' $1 >> $1\D
done
rm $1
Unfortunetly эта программа занимает около 4-6 секунд, чтобы запустить цикл, и в 250000 строк, которые будут принимать около 5 дней и занимают большую часть компьютерного кластера я использую.
Любые советы по выполнению этого быстрее и эффективнее? Я открыт для всего, что угодно ...
Вы можете начать с того, что не запускаете 'awk' над одним и тем же файлом дважды, чтобы вытащить разные значения. Это просто расточительно. –
Посмотрите на [Gnu parallel] (http://www.gnu.org/software/parallel/). – Yohann
Это не проблема с ЦП. Параллелизм не поможет, если вы не собираетесь распространять данные по нескольким дискам. – slim