Как дублировать столбец и разделить другой столбец на основе разделителя с помощью awk или sed? - PullRequest
1 голос
/ 02 июля 2019

У меня большой входной файл, который выглядит следующим образом:

VARIANTS        SAMPLES
chr1:10583:G:A  HSB100
chr1:10583:G:A  HSB105
chr1:10583:G:A  HSB107
chr1:10583:G:A  HSB121
chr1:10583:G:A  HSB122

Мне нужно, чтобы он выглядел следующим образом:

CHROM   POS     ID              REF ALT QUAL FILTER INFO
chr1    10583   chr1:10583:G:A  G   A   .    .      HSB100
chr1    10583   chr1:10583:G:A  G   A   .    .      HSB105
chr1    10583   chr1:10583:G:A  G   A   .    .      HSB107
chr1    10583   chr1:10583:G:A  G   A   .    .      HSB121
chr1    10583   chr1:10583:G:A  G   A   .    .      HSB122

По сути, мне нужно продублировать первыйстолбец ввода (который станет столбцом ID), а затем разделите исходный столбец на основе разделителя ':' на эти новые столбцы.Я написал скрипт на Python для этого, но он использует слишком много памяти.Столбцы QUAL и FILTER являются просто фиктивными столбцами, в которых все строки имеют значение ..Как я могу получить желаемый результат, используя что-то вроде awk или sed?

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Разделив двоеточие на 1 доллар, можно сгенерировать вывод:

$ awk '{split($1,s,":"); print s[1],s[2],$1,s[3],s[4],".",".",$2;}' file.txt
chr1 10583 chr1:10583:G:A G A . . HSB100
chr1 10583 chr1:10583:G:A G A . . HSB105
chr1 10583 chr1:10583:G:A G A . . HSB107
chr1 10583 chr1:10583:G:A G A . . HSB121
chr1 10583 chr1:10583:G:A G A . . HSB122
0 голосов
/ 02 июля 2019

Это может работать для вас (GNU sed):

sed -E 's/^((.*):(.*):(.*):(.*)) /\2 \3 \1\4 \5. . /' file

Сравнение с образцом и обратные ссылки.

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