【发布时间】:2021-06-25 21:04:04
【问题描述】:
我有一个file.vcf,其中包含以下几行。我想用 awk 命令替换我文件中的#(请注意单个#)。
##contig=<ID=23,length=155698556>
##INFO=<ID=PR,Number=0,Type=Flag,Description="Provisional reference allele, may not be based on real reference genome">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM POS ID REF ALT
我尝试了awk '/^#CHROM/{sub(/^#/,"")} 1' file.vcf,但它会在下面生成以下错误。我在这里错过了什么?
awk: cmd. line:1: /^#CHROM/{sub$(/^#/,"")} 1
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: /^#CHROM/{sub$(/^#/,"")} 1
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: /^#CHROM/{sub$(/^#/,"")} 1
awk: cmd. line:1: ^ invalid char '▒' in expression
我想要的结果:
##contig=<ID=23,length=155698556>
##INFO=<ID=PR,Number=0,Type=Flag,Description="Provisional reference allele, may not be based on real reference genome">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
CHROM POS ID REF ALT
【问题讨论】:
-
为什么
sub后面有$? -
为什么要使用
awk?sed 's/^#CHROM/CHROM/' file.vcf -
错误信息不是很清楚吗?它告诉你
$是一个语法错误。 -
a在sub()的第二个参数中是否代表一个空字符串,因为它是一个未分配的变量?如果是这样 - 不要那样做,它只会让你的代码更难理解,绝对没有理由。如果你想要一个空字符串,那么写一个空字符串,""。 -
@MAPK 我看到你很快就接受了你得到的第一个答案。这将阻止其他人提供答案,因此如果您知道您得到的第一个答案是最好的答案,这只是一个明智的举动。一切顺利,