我有一个很大的输入文件,如下所示:
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这样的输出?
答案 0 :(得分:2)
通过在$ 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
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -E 's/^((.*):(.*):(.*):(.*)) /\2 \3 \1\4 \5. . /' file
模式匹配和反向引用。