我在使用 grep 时遇到一些问题。我编写了一个脚本,需要从列表中查找一些数字(文件名重叠群名称)在数据库中。我写了以下脚本:
file=ContigsNames
while IFS=' ' read -r f1 f2
do
grep '$f1' /data/databases/fasta/lizih/metagenemark_predictions.faa
#grep 1703496 /data/databases/fasta/lizih/metagenemark_predictions.faa
done < "$file"
作为检查,我输入了包含列表中特定数字的 grep 行,效果非常好!所以看起来“$f1”有一些问题。当我执行 echo "$f1" 时,它打印了正确的数字,没有任何问题。
可能是什么问题?它可能与“字符串”类型而不是数字有关吗?
答案1
您将单引号引起来$f1
,这会导致不被扩展,您应该使用双引号。根据它的值,它f1
可以解释为 Stephane 指示的选项(而不是正则表达式),因此您必须明确这一点:
file=ContigsNames
while IFS=' ' read -r f1 f2
do
grep -Fe "$f1" /data/databases/fasta/lizih/metagenemark_predictions.faa
#grep 1703496 /data/databases/fasta/lizih/metagenemark_predictions.faa
done < "$file"