bash执行VCF染色体修改命令报语法错误求助
VCF批量染色体命名修改命令报错定位
直接触发报错的核心原因
本次执行抛出Syntax error with the unexpected word (的报错,最核心的问题是bash进程替换的语法写错了:
- bash中进程替换的固定语法格式为
<(命令序列),要求<和紧随的(之间不能有任何空格。原命令里写的是< (, 中间多了空格,shell会把单独的<解析为标准输入重定向符号,后续读到的(不属于合法的重定向目标,直接触发语法解析错误。
容易被忽略的隐藏错误
就算修正了上面的空格问题,原命令依然无法正常执行,还存在两处会导致执行失败的问题:
- 命令中多处sed替换规则的前后引号是中文全角弯引号(类似
‘内容’的格式),并非bash可识别的半角ASCII单引号,会导致shell无法正确解析命令参数。 - 提取VCF头注释时用了
head -50 Nipponbare_indel.vcf | grep '#'的逻辑,如果文件的注释行数超过50行,会截断丢失VCF格式必需的头部信息,最好直接通过grep '^#' 原VCF文件提取所有以#开头的注释行,稳定性更高。
修正后的可执行命令
cat <(grep '^#' Nipponbare_indel.vcf | sed 's/ID=\([0-9][0-9]*\)/ID=Chr\1/g' | cut -f1-8) \ <(grep -v '^#' Nipponbare_indel.vcf | cut -f1-8 | sed 's/^\([0-9]*\)/Chr\1/g') \ <(grep -v '^#' NB_final_snp.vcf | cut -f1-8 | sed 's/^\([0-9]*\)/Chr\1/g') \ > Nipponbare_indel_SNP.vcf
内容的提问来源于stack exchange,提问作者Stengah966
相关产品推荐
相关产品推荐

