如何使用 bash 从 vcf 文件中删除 chr

问题描述 投票:0回答:3

我需要从我的 vcf 文件中删除“chr”。这是vcf文件的方面:

#CHROM  POS  
chr1   10570
chr1   10574
chr1   10654

我想要以下的

#CHROM  POS  
   1   10570
   1   10574
   1   10654

我试过以下几种方法:

awk '{gsub(/^chr/,""); print}' your.vcf > no_chr.vcf
sed 's/^chr//'
sed 's:chr::g'
awk '{gsub(/\chr/, "")}1'
perl -pe  's/^chr//g'
sed '/^##/! s/chr//'

但是它们不起作用……有什么建议吗? 谢谢!

bash awk sed bioinformatics vcf-variant-call-format
3个回答
1
投票

用3个空格替换它。

sed 's/^chr/   /' your.vcf > no_chr.vcf

0
投票

使用

sed

$ sed -E '/^#/! {:a;s/[a-z]([0-9])?/ \1/;ta}' input_file
#CHROM  POS
   1   10570
   1   10574
   1   10654

0
投票

使用这个 Perl 单行代码:

perl -i.bak -pe  's/^chr//' your.vcf

Perl 单行代码使用这些命令行标志:

-e
:告诉 Perl 查找内联代码,而不是在文件中。
-p
:一次循环输入一行,默认情况下将其分配给
$_
。在每次循环迭代后添加
print $_

-i.bak
:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过在其名称后附加扩展名
.bak
来保存原始文件的备份副本。如果你想跳过写备份文件,只需使用
-i
并跳过扩展名。

s/^chr//
:用空字符串替换字符串开头的
chr
(此处为行)。无需使用
g
修饰符,因为每行只有一个替换项。

另见:


带有输入和输出的完整示例:

创建测试输入:

cat > your.vcf <<EOF
#CHROM  POS  
chr1   10570
chr1   10574
chr1   10654
EOF

使用

cat
hexdump
确认没有特殊字符:

cat your.vcf

印花:

#CHROM  POS  
chr1   10570
chr1   10574
chr1   10654
hexdump -C your.vcf

印花:

00000000  23 43 48 52 4f 4d 20 20  50 4f 53 20 20 0a 63 68  |#CHROM  POS  .ch|
00000010  72 31 20 20 20 31 30 35  37 30 0a 63 68 72 31 20  |r1   10570.chr1 |
00000020  20 20 31 30 35 37 34 0a  63 68 72 31 20 20 20 31  |  10574.chr1   1|
00000030  30 36 35 34 0a                                    |0654.|
00000035

删除

chr

perl -i.bak -pe  's/^chr//' your.vcf

查看文件:

cat your.vcf

印花:

#CHROM  POS  
1   10570
1   10574
1   10654
© www.soinside.com 2019 - 2024. All rights reserved.