【发布时间】:2019-05-23 23:12:16
【问题描述】:
我有一个空格分隔的文件,如下所示:
$ cat in_file
GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1 Chal_sti_synt_C
GCF_000046845.1_ASM4684v1_protein.faa WP_004927566.1 Chal_sti_synt_C
GCF_000046845.1_ASM4684v1_protein.faa WP_004919950.1 FAD_binding_3
GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1 FAD_binding_3
我正在使用以下 shell 脚本,利用 grep 来搜索字符串:
$ cat search_script.sh
grep "GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1" Pfam_anntn_temp.txt
grep "GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1" Pfam_anntn_temp.txt
问题是我希望每个 grep 命令只返回它找到的字符串的第一个实例exclusive 之前相同的 grep 命令的输出。
我需要一个如下所示的输出:
$ cat out_file
GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1 Chal_sti_synt_C
GCF_000046845.1_ASM4684v1_protein.faa WP_004920342.1 FAD_binding_3
其中第 1 行是第一个 grep 命令的输出,第 2 行是第二个 grep 命令的输出。我该怎么做?
附:我在一个大文件(>125,000 行)上运行它。所以,search_script.sh 主要由独特的 grep 命令组成。正是相同命令的执行打乱了我的下游分析。
【问题讨论】:
-
@WiktorStribiżew 我已经回答了这个问题及其答案。我的问题不同,该问题的答案不符合我的目的。
-
我撤销了接近投票。
-
我认为您不需要重复该命令。使用一次 (it seems to extract what you need),获取所有匹配项,然后您可以对其进行迭代。
-
正如@WiktorStribiżew 建议的那样,只运行一次
grep并将结果放入一个数组中,然后依次使用它们循环遍历数组...参见此处的第2 点并将您的grep代替my_commandstackoverflow.com/a/32931403/2836621
标签: grep