【问题标题】:grep: invalid repetition count(s) when using while loop [duplicate]grep:使用while循环时重复计数无效[重复]
【发布时间】:2019-07-25 15:56:05
【问题描述】:

所以我使用的是 MacOS 命令行并有两个文件

文件 A.txt

A
B
F

文件 B.txt

>A
abcde
>B
efghi
>C
jklmn
>D
opqrs
>E
tuvwx
>F
yz123

我希望它通过文件 A.txt 进行 while 循环,并且只打印文件 B.txt 中的相应标题和内容

>A
abcde
>B
efghi
>F
yz123

当我单独浏览文件 A 中的每一行时,此行有效。 grep -n "\A\,\>\{x;p;}" B.txt

但是当我这样做时: While read i; do grep -n "\$i\,\>\{x;p;}" B.txt >> newfile.txt; done < A.txt

我收到此错误: grep: invalid repetition count(s)

我做错了什么?

【问题讨论】:

  • @tripleee 让我们开始一个项目以便于处理 fasta 文件。这种格式似乎被广泛使用,除了 grep、sed、awk 之外没有其他工具。考虑到它的用途,这实际上吓到了(我):)
  • 真的是grep吗? grep -n "\A\,\>\{x;p;}" B.txt 看起来应该是 sed -n "\A\,\>\{x;p;}" B.txt
  • 嗨@tripleee - 成功了!
  • 和 @hek2mgl - 这将非常有帮助。寻找答案和我的谷歌搜索一样好。非常感谢你们的帮助。
  • @hek2mgl 问题不在于缺乏工具,他们有 BioPerl、BioPython 等……只是生物技术人员通常只是学习基本的 U*x。

标签: bash grep fasta


【解决方案1】:

使用grep,您可以使用:

/bin/grep -A1 -Ff fileA fileB 
>A
abcde
>B
efghi
--               <--- produces separators
>F
yz123

也可以使用 awk:

awk 'NR==FNR{a[$0];next}{sub(/^>/,"")} $0 in a {print ">"$0;p=1;next} p{print;p=0}' fileA fileB 
>A
abcde
>B
efghi
>F
yz123

【讨论】:

  • 感谢 hek2mgl!有没有办法修改它以包含多于一行的内容? &gt;A abcdefghi jklmopqrs &gt;B ..... jklmopqrs 在哪里换行了?
  • 多少行?
  • 情况不同。有些会有 10 行的模式,有些只有 5 行。
猜你喜欢
  • 2014-04-09
  • 2015-03-21
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多