Как извлечь конкретный текст из файла GZ? - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно извлечь от 5 до 11 символов из моих данных fastq.gz, эти данные слишком велики для запуска в R. Так что мне было интересно, могу ли я сделать это непосредственно в командной строке Linux?Файл fastq выглядит следующим образом:

@NB501399:67:HFKTCBGX5:1:11101:13202:1044 1:N:0:CTTGTA
GAGGTNACGGAGTGGGTGTGTGCAGGGCCTGGTGGGAATGGGGAGACCCGTGGACAGAGCTTGTTAGAGTGTCCTAGAGCCAGGGGGAACTCCAGGCAGGGCAAATTGGGCCCTGGATGTTGAGAAGCTGGGTAACAAGTACTGAGAGAAC
+
    AAAAA#EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAAEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAE6

@NB501399:67:HFKTCBGX5:1:11101:1109:1044 1:N:0:CTTGTA
TAGGCNACCTGGTGGTCCCCCGCTCCCGGGAGGTCACCATATTGATGCCGAACTTAGTGCGGACACCCGATCGGCATAGCGCACTACAGCCCAGAACTCCTGGACTCAAGCGATCCTCCAGCCTCAGCCTCCCGAGTAGCTGGGACTACAG
+

И я хочу извлечь только 5-11 символов, которые расположены в части последовательности (для первого - TNACGG, для второго - CNACCT) и делает егоновый текстовый файл.Могу я это сделать?

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Еще один, использующий zgrep и положительный вид сзади:

$ zgrep -oP "(?<=^[ACTGN]{4})[ACTGN]{6}" foo.gz
TNACGG
CNACCT

Объяснено:

  • zgrep: man zgrep: поиск возможно сжатых файлов для обычноговыражение
  • -o Печатать только совпадающие (непустые) части совпадающей строки
  • -P Интерпретировать шаблон какСовместимое с Perl регулярное выражение (PCRE).
  • (?<=^[ACTGN]{4}) положительный вид сзади
  • [ACTGN]{6} соответствует 6 именованным символам, которым предшествует выше
  • foo.gzмой тестовый файл
0 голосов
/ 14 декабря 2018
$ zcat fastq.gz | awk '(NR%5)==2{print substr($0,5,6)}'
TNACGG
CNACCT
0 голосов
/ 14 декабря 2018

Вы можете использовать GNU sed с zcat:

zcat fastq.gz | sed -n '2~5{s/.\{4\}\(.\{6\}\).*/\1/;p}'
  • -n означает, что строки не печатаются по умолчанию
  • 2~5 означает начинаться со строки 2сопоставляя каждую пятую строку
  • , когда «адрес» совпадает, подстановка запоминает пятый-десятый символ в \1 и заменяет всю строку на него, p печатает результат
...