带 grep 和空格的 For 循环

带 grep 和空格的 For 循环

当尝试同时使用 for 循环和 grep 时,我似乎对空格有一点问题。空格很重要,因为例如我想匹配“k117_19650”,而不是“k117_196509”。帮助将不胜感激!

for i in 'k117_19650 ' 'k117_460555 ';do
    grep -A1 $i final.contigs.fa >> gene.fa
done

答案1

您面临的问题与您使用 shell 变量有关。特别是当使用包含“非标准”字符(例如空格)的变量时,总是引用你的变量使用它们时,请参阅此处的讨论:

在你的情况下:

grep -A1 -- "$i" final.contigs.fa >> gene.fa

应该可以解决这个问题(这里还添加一个--以防止$i以 开头的值-)。

答案2

为了进行这种分离(匹配 'k117_19650 ',但不匹配 'k117_196509 ' ),您可以使用-win grepwhich 使其搜索整个单词而不是子字符串。

for i in k117_19650 k117_460555 ;do
    grep -w -A1 "$i" final.contigs.fa >> gene.fa
done

相关内容