L oop для печати нескольких сотен файлов с заданным заданием c - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть пара сотен файлов, таких как A.vcf, B.vcf, из которых я хочу извлечь 7-й столбец, разделенный :, а затем получить вывод.

##fileformat=VCFv4.0
##reference=chrRCRS
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Reads covering the REF position">
##FORMAT=<ID=HF,Number=.,Type=Float,Description="Heteroplasmy Frequency of variant allele">
##FORMAT=<ID=CILOW,Number=.,Type=Float,Description="Value defining the lower limit of the confidence interval of the heteroplasmy fraction">
##FORMAT=<ID=CIUP,Number=.,Type=Float,Description="Value defining the upper limit of the confidence interval of the heteroplasmy fraction">
##FORMAT=<ID=SDP,Number=.,Type=String,Description="Strand-specific read depth of the ALT allele">
##INFO=<ID=AC,Number=1,Type=Integer,Description="Allele count in genotypes">
##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  SRR5137814_1
chrMT   64      .       C       T       .       PASS    AC=1;AN=1       GT:DP:HF:CILOW:CIUP:SDP 1:57:1.0:0.924:1.0:26;31
chrMT   73      .       A       G       .       PASS    AC=1;AN=1       GT:DP:HF:CILOW:CIUP:SDP 1:59:1.0:0.927:1.0:24;35
chrMT   146     .       T       C       .       PASS    AC=1;AN=2       GT:DP:HF:CILOW:CIUP:SDP 0/1:49:0.939:0.829:0.985:21;25
chrMT   153     .       A       G       .       PASS    AC=1;AN=2       GT:DP:HF:CILOW:CIUP:SDP 0/1:46:0.978:0.876:1.0:19;26
chrMT   235     .       A       G       .       PASS    AC=1;AN=1       GT:DP:HF:CILOW:CIUP:SDP 1:56:1.0:0.923:1.0:22;34
chrMT   263     .       A       G       .       PASS    AC=1;AN=2       GT:DP:HF:CILOW:CIUP:SDP 0/1:56:0.982:0.897:1.0:25;30
chrMT   302     .       A       AC      .       PASS    AC=1;AN=2       GT:DP:HF:CILOW:CIUP:SDP 0/1:32:0.188:0.089:0.354:0;6
chrMT   309     .       C       CCT     .       PASS    AC=1;AN=2       GT:DP:HF:CILOW:CIUP:SDP 0/1:34:0.265:0.146:0.431:0;9

В этом формате У меня есть пара 100 файлов. Я хочу получить вывод столбца DP для каждого файла, а также максимальное и минимальное значение DP для файла. Имя каждого файла должно быть там, и все это может быть в выводе txt файла. Пожалуйста, порекомендуйте.

Пример вывода для DP:

ФАЙЛ МАКС. МИН.
SRRXXXX 13 1

SRRXXXY 12 2

и т. Д.

1 Ответ

0 голосов
/ 14 февраля 2020

ПРИМЕЧАНИЕ. Следующие данные основаны на исходном вопросе и желаемом выводе (кажется, что вопрос и формат требуемого вывода претерпевает некоторые изменения ... ???)


Допущения:

  • имя каждого выходного раздела - это имя входного файла минус путь и .vcf расширение
  • каждый файл содержит ровно 3 строки, по крайней мере, с 7 полями (ограничены :)

Пример данных:

$ cat test/A.vcf
line1:f2:f3:f4:f5:f6:12:f8:
line2:f2:f3:f4:f5:f6:12:f8:
line3:f2:f3:f4:f5:f6:13:f8:
$ cat test/B.vcf
line1:f2:f3:f4:f5:f6:13:f8:
line2:f2:f3:f4:f5:f6:13:f8:
line3:f2:f3:f4:f5:f6:12:f8:
$ cat test/C.vcf
line1:f2:f3:f4:f5:f6:20:f8:
line2:f2:f3:f4:f5:f6:21:f8:
line3:f2:f3:f4:f5:f6:22:f8:

Для печати имени файла (без пути и .vcf) мы запустим пару команд awk/split для встроенной переменной FILENAME:

# define ":" as our input file delimiter

awk -F":" '

# FNR==1 => processing a new file so time to parse and print FILENAME

FNR==1 { if ( FNR!=NR ) { printf "\n" }    # FNR!=NR => not the first file so print a blank line to separate output sections
         n=split(FILENAME,arr1,"/")        # split FILENAME by "/" and place parts in array "arr1"
         split(arr1[n],arr2,".")           # split last element of arr1 by "." and place parts in array "arr2"
         print arr2[1] }                   # print first element of arr2

       { print $7 }                        # for all input lines => print field #7
' test/*.vcf

ПРИМЕЧАНИЕ. Снимите блоки комментариев, чтобы уменьшить беспорядок.

Запуск вышеуказанного для наших файлов 3x * vcf создает:

A
12
12
13

B
13
13
12

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