Выполнение конкатенации для всех строк
Я работаю с данными GWAS.
С использованием
p-link
команда мне удалось получить SNPslist,
SNPs.map
,
SNPs.ped
.
Вот файлы данных и команды, которые у меня есть для 2 SNP (
rs6923761
,
rs7903146
):
$ cat SNPs.map
0 rs6923761 0 0
0 rs7903146 0 0
$ cat SNPs.ped
6 6 0 0 2 2 G G C C
74 74 0 0 2 2 A G T C
421 421 0 0 2 2 A G T C
350 350 0 0 2 2 G G T T
302 302 0 0 2 2 G G C C
команды, которые я использовал:
echo -n IID > SNPs.csv
cat SNPs.map | awk '{printf ",%s", $2}' >> SNPs.csv
echo >> SNPs.csv
cat SNPs.ped | awk '{printf "%s,%s%s,%s%s\n", $1, $7, $8, $9, $10}' >> SNPs.csv
cat SNPs.csv
Выход:
IID,rs6923761,rs7903146
6,GG,CC
74,AG,TC
421,AG,TC
350,GG,TT
302,GG,CC
Это примерно 2 SNP, поэтому я могу вручную увидеть их положение, поэтому я добавил и вызвал с помощью приведенной выше команды. Но теперь у меня есть 2000 идентификаторов SNP и их значений. Нужна помощь с
bash
команда, которая может анализировать более 2000 SNP таким же образом.
2 ответа
Вы можете использовать--recodeA
флаг вplink
иметь свойIID
как ряды иSNPs
как столбцы.
Один
awk
идея, которая заменяет весь текущий код:
awk '
BEGIN { printf "IID" }
# process 1st file:
FNR==NR { printf ",%s", $2; next }
# process 2nd file:
FNR==1 { print "" } # terminate 1st line of output
{ printf $1 # print 1st column
for (i=7;i<=NF;i=i+2) # loop through columns 7-NF, incrementing index +2 on each pass
printf ",%s%s", $i, $(i+1) # print (i)th and (i+1)th columns
print "" # terminate line
}
' SNPs.map SNPs.ped
ПРИМЕЧАНИЕ. Удалите комментарии, чтобы очистить код .
Это генерирует:
IID,rs6923761,rs7903146
6,GG,CC
74,AG,TC
421,AG,TC
350,GG,TT
302,GG,CC