Выполнение конкатенации для всех строк

Я работаю с данными 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
Другие вопросы по тегам