【问题标题】:Read in file line by line and search another file for a line with a partial match逐行读取文件并在另一个文件中搜索具有部分匹配的行
【发布时间】:2019-05-07 12:49:45
【问题描述】:

我有一个文件与另一个文件中的行部分匹配。为了做到这一点,我希望生成一个 while 循环,其中读取并将每行部分匹配的变量替换为 grep 命令以搜索具有部分匹配的数据库文件,但由于某种原因,我没有得到输出(一个空的 outputfile.txt)。

这是我当前的脚本

while read -r line; do
    grep $line /path/to/databasefile >> /path/to/folder/outputfile.txt
done < "/partial_matches.txt"

数据库有多行,其后是序列名称,然后是 DNA 序列:

 >transcript_ab
 AGTCAGTCATGTC
 >transcript_ac
 AGTCAGTCATGTC
 >transctipt_ad
 AGTCAGTCATGTC

部分匹配的搜索文件有文本行:

 ab
 ac

我正在寻找以下的回报:

 >transcript_ab
 >transcript_ac

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 所以/outputfile.txt 是空的? (P.S. 你是怎么写信给/的?你是以root身份运行的吗?!)
  • @RobinGreen 是的,outputfile.txt 是空的,我只是没有包含文件的路径,但是我在问题中进行了编辑和澄清
  • 你有写入文件的权限吗?
  • @RobinGreen 是的,它在我的用户目录中
  • 这并不一定意味着您有权对其进行写入。请检查。

标签: linux bash while-loop grep


【解决方案1】:

您可以使用 for 循环:

for i in $(cat partial_matches.txt); do
grep $i /path/to/databasefile >> /path/to/folder/outputfile.txt
done

另外,请检查您是否有错字: "/partial_matches.txt" -> "./partial_matches.txt"

【讨论】:

    【解决方案2】:

    如果您使用的是 GNU grep,那么它的 -f 选项就是您要寻找的:

    grep -f /partial_matches.txt /path/to/databasefile
    

    (如果您在 partial_matches.txt 中没有任何模式,而只有字符串,则使用 grep -F 而不是 grep

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2013-09-08
      相关资源
      最近更新 更多