Я использую вложенные циклы while в awk, и он потребляет большое количество вычислительной мощности, а в некоторых случаях имеет ошибки сегмента и дампы ядра.
Пример строки ввода:
2846196 TGGTGTATTTGAGGAAGTGTAGTGGGGTATGGTGGTGTTAGAGGGTGGGGATATGGAGGCGGTATAAGGTTAAGGCGTCGGGGGATGGTTAGAGGGAAGTAACGGTCGCGTTTGTG 0C2C1C2C10C2C4C4C4C13C10C1C4C0C6C10C0C15C4C5
каждая строка имеет 3 вкладки разделены данные: номер, затем строку, затем список которых письмо заменить и с чем.так что вы идете 0 букв заменить на C, затем 2 буквы и заменить следующий и т.д ..
Вот мой код:
awk -v OFS="\t" '
{nREAD=split($2,READ,"");
nCs=split($3,Cs, "[ACGT]");
printf $1"\t"$2"\t";
sum=0;
j=1;
while (j<=nCs){ i=0; while (i<Cs[j]) {i++; printf READ[i+sum]}; sum=sum+i+1; j++; printf "G"};
printf "\n"
}
' tempGA.sam > tempGA.results
Я получаю ошибку, которая, я считаю, связанак исчерпанию оперативной памяти:
. /% methReadsNovoalign.sh: строка 73: 899 Ошибка сегментации (ядро сброшено)
или
. /% метилReadsNovoalign.sh: строка73: 642 убито
. /% MethReadsNovoalign.sh: строка 73: 475 убито
Основные файлы отчета также имели размер 90+ ГБ при обработке файлов размером менее 5 ГБ, что выглядит какмного.
Есть ли в цикле while что-нибудь, что использовало бы столько памяти?Это внутри цикла while в большем скрипте bash, но происходит сбой только некоторых процессов awk.Будет ли пытаться делать что-то параллельно или мне нужно вручную очистить часть памяти во время цикла while?Я не понимаю, как он использует столько памяти.Все строки должны быть длиной 125 символов.
Спасибо за любую помощь.