Использованиеawk
:
awk '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
(FNR-2) % 4 == 0 { seq=substr($0,1,6) }
{ print name "." seq, chr, len
print substr($0,7) }' file.fastq >newfile.fastq
Эта awk
программа состоит из трех блоков.
Первый блок запускает в каждой второй строке (последовательность и строки заголовка данных качества ), начиная с первой. Он сохраняет три бита информации в этой строке в трех переменных. Затем он сразу же переходит к следующей строке ввода.
Второй блок извлекает 6 первых символов из строки последовательности в seq
, но только для каждой четвертой строки, начиная со строки 2 (только строки последовательности ).
Последний блок работает только со строками, не обработанными первым блоком (для каждой последовательности или строки данных качества )и формирует выходные данные.
Чтобы использовать это наgzip
-сжатых файлах (илиbgzip
-сжатых файлах, обычно используемых в проектах биоинформатики ),использовать
zcat file.fastq.gz | awk '...' | bgzip -c >newfile.gz
Чтобы использовать переменную в качестве значения, используемого для резки, рассмотрим
awk -v n=6 '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
(FNR-2) % 4 == 0 { seq=substr($0,1,n) }
{ print name "." seq, chr, len
print substr($0,n+1) }'
Где -v n=6
управляет длиной разреза.
Вы также можете поместить фактический awk
код (в одинарные кавычки )в отдельный файл сценария и использовать его как
awk -v n=6 -f script.awk file.fastq