Подтвердить что ты не робот

Как использовать awk для сжатого файла

Как изменить следующую команду для сжатого файла?

awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1.vcf input2.vcf

Команда работает нормально с обычным файлом. Мне нужно изменить команду для сжатых файлов.

4b9b3361

Ответ 1

Вам необходимо прочитать сжатые файлы следующим образом:

awk '{ ... }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz)

Попробуйте следующее:

awk 'FNR==NR { sub(/AA=\.;/,""); array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz) | gzip > output.vcf.gz

Ответ 2

zcat FILE | awk '{ ...}'

Я бы не смог определить, какой из этих методов работает лучше всего, zcat, по крайней мере, быстрее набирать;)

Ответ 3

bzip2 -dc input1.vcf.bz2 input2.vcf.bz2 | awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }'

или

gzip -dc input1.vcf.gz input2.vcf.gz | awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }'

EDIT:

Чтобы записать сжатый вывод, просто добавьте

| bzip2 >output.vcf.bz2

или

| gzip >output.vcf.gz

Это будет работать с любой программой, которая выводит результаты на стандартный вывод.

BTW: Редактирование таких больших команд очень утомительно. Вы должны рассмотреть возможность написания небольшой оболочки script для выполнения задания. Это дает дополнительное преимущество, которое вам не нужно запоминать, и может легко повторить команду или при необходимости изменить ее.

Хорошей отправной точкой для программирования оболочки Linux является Bash Ввод в программирование Майком Г.