sed - 需要帮助,看不到错误
问题描述
我的工作是根据论文的规范遵循不同命令的管道。但是,有一个命令可以更改染色体名称。这个命令非常复杂,对我来说是一个真正的挑战。
$ cat < (head -50 Nipponbare_indel.vcf | grep ’#’ | 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
输出:'意外单词的语法错误('
echo $SHELL
给/bin/bash
有没有人看到错误?
解决方案
Bash 有一个特殊的语法(进程替换) ,和<(command)
之间没有空格。删除那些空格。
有一些换行符:<
(
cat <(head -50 Nipponbare_indel.vcf | grep ’#’ |
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
在上面的命令中我没有修复错误的单引号。
实际上这里不需要使用进程替换,可以写
indel=Nipponbare_indel.vcf
snp=NB_final_snp.vcf
outfile=Nipponbare_indel_SNP.vcf
head -50 "${indel}" | grep ’#’ |
sed 's/ID=\([0-9][0-9]*\)/ID=Chr\1/g' | cut -f1-8 > "${outfile}"
grep -v '#' "${indel}" | cut -f1-8 |
sed 's/^\([0-9]*\)/Chr\1/g' >> "${outfile}"
grep -v '#' "${snp}" | cut -f1-8 |
sed 's/^\([0-9]*\)/Chr\1/g' >> "${outfile}"
现在您想删除重复的代码,但如果没有示例输入和输出文件,您还不清楚您想要什么。在包含所有以 like 开头的注释字段的原始代码“Chr”中ID=(digits)
,第二个和第三个sed
是错误的:
sed 's/^\([0-9]*\)/Chr\1/g' inputfile
允许使用*
0 个或多个数学,从而为所有非空行插入 Chr。全局标志/g
无效,因为^
它与行首匹配。
当您想Chr
在该行的第一个数字序列之前插入时,您可以搜索第一个数字并使用
indel=Nipponbare_indel.vcf
snp=NB_final_snp.vcf
tmpfile=NB_parsing.tmp
outfile=Nipponbare_indel_SNP.vcf
head -50 "${indel}" | grep ’#’ > "${tmpfile}"
grep -v '#' "${indel}" >> "${tmpfile}"
grep -v '#' "${snp}" >> "${tmpfile}"
cut -f1-8 "${tmpfile}" | sed 's/[0-9]/Chr&/' >> "${outfile}"
rm "${tmpfile}"
推荐阅读
- docker - 如何修复 Docker 中的磁盘空间不足错误?
- php - 以数组值作为键的数组合并
- java - 单击时检查和取消选中 RadioButton
- azure - 更新 AzureRmVmss 命令不起作用
- python - 为什么烧瓶闪光灯不起作用?
- html - 辅助功能 - Control+Option+Space 未打开下拉菜单(选择元素)
- php - PHP 7.2 和模块“dom”、“mbstring”和“simplexml”
- sql - 在不同聚合的表之间创建关系
- tensorflow - 部署模型
- azure-language-understanding - 短语列表中的“值可互换”选项在 LUIS 中如何工作?