Этот скрипт не тонкий и не читаемый, но он работает и, в отличие от уже опубликованного awk
решения, также генерирует строку заголовка:
sed 'G;s/^SNP.*/SNP/
/^1 /s/ \([^ ]*\).*SNP[^[:cntrl:]]*/& Geno\1/
s/^\([0-9]*\) [^ ]*\( [AB]*\)\n\(.*\n\1 [AB ]*\)/\3\2/
s/^\([0-9]*\) [^ ]*\( [AB]*\)\(\n\)\(.*\)/\4\3\1\2/
h
$!d' file1 > file2
Не будучи awk
пользователем, я думаю, вы можете расширить данное awk
решение таким образом, чтобы также сгенерировать строку заголовка:
awk '{if ($1==1) h=h" Geno"$2
if ($1!="SNP") g[$1]=g[$1]" "$3}
END {print "SNP"h; for (i in g) print i g[i]}' file1 > file2