Почему при транспонировании файла в awk требуется гораздо больше памяти, чем размер файла? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть данные c геноми, которые я извлек из файла vcf, распространенного типа файлов в генетике. Подмножество его выглядит следующим образом.

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  sub1 sub2 sub3
22      18171776        rs61741787      A       G       .       .       PR      GT      1/1     1/1     1/1
22      18171842        rs147280257     G       T       .       .       PR      GT      1/1     1/1     1/1
22      18209920        rs9306198       T       C       .       .       PR      GT      1/1     1/1     0/1
22      18209989        rs144030966     A       G       .       .       PR      GT      1/1     1/1     1/1
22      18893995        rs409155        G       C       .       .       PR      GT      1/1     1/1     1/1
22      18898420        rs146390355     A       G       .       .       PR      GT      1/1     1/1     1/1
22      18898468        rs139729355     A       G       .       .       PR      GT      0/1     1/1     1/1
22      19183787        rs1633399       G       A       .       .       PR      GT      1/1     0/1     1/1

Однако в фактическом файле 81 строка и 337 498 столбцов.

Я пытаюсь транспонировать файл, используя следующий сценарий awk.

awk '
{ 
  for (i=1; i<=NF; i++)  {
    a[NR,i] = $i
  }
  if (NF>cols) {cols=NF}
}
END {    
  for(j=1; j<=cols; j++) {
    str=a[1,j]
    for(i=2; i<=NR; i++){
      str=str"\t"a[i,j]
    }
    print str
  }
}' input_file \
> transposed_output_file

Я понимаю, что этот сценарий требует, чтобы awk удерживал весь файл в памяти. Однако сценарий использует гораздо больше памяти, чем размер файла. Размер входного файла - 131 МБ, но после запуска сценария в кластере seff сообщает мне, что пиковое использование памяти было 5,05 ГБ. Это проблема, потому что я хочу запустить тот же сценарий для файла гораздо большего размера. Использование сценария с этим входным файлом размером 5,3 ГБ дает мне ошибку нехватки памяти даже после выделения 100 ГБ. Информация? Как избежать этой проблемы?

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...