使用grep将与模式匹配的第一行中的所有行返回到其他模式

艾米莉·罗兰兹(Emily Rowlands)

我相信我需要使用grep,因为我正在搜索多个文件,并且我需要文件名显示为每一行的标题。我在macOS上使用终端。

所以说我在目录“ dir”中有一个文件file1,内容如下:

>species one; trnF(ggc)
GGCCC
AACGC
>species one; rrnS
TAGCA
GGCAC

在目录“ dir”中还有一个附加文件file2,内容如下

>species two; trnF(gga)
GGACG
CGACG
GCAC
>species two; rrnS
GCATG
GGCAG

我想得到以下输出:

dir/file1:>species one; trnF(ggc)
dir/file1-GGCCC
dir/file1-AACGC
--
dir/file2:>species two; trnF(gga)
dir/file2-GGACG
dir/file2-CGACG
dir/file2-GCAC

我可以使用-A在具有模式的行之后获得特定数量的行:

$ grep -A 2 'trnF' dir/file*

但是文件在grep命令之后有不同的行数,因此我得到以下信息:

dir/file1:>species one; trnF(ggc)
dir/file1-GGCCC
dir/file1-AACGC
--
dir/file2:>species two; trnF(gga)
dir/file2-GGACG
dir/file2-CGACG

如何获得所有内容,直到下一个'>'符号?

库萨兰达

正如您所发现的,它grep -A是不灵活的,因为它仅允许指定上下文的静态行数。

相反,这是一条awk命令,用于检测选定序列何时发生,并将其输出,直到遇到另一个不符合条件的序列头为止:

awk -v name='trnF' -v OFS=':\t' '
    FNR == 1 && NR > 1 { print "--" }
    /^>/ { out=0 }
    $0 ~ "^>.*" name { out=1 }
    out == 1 { print FILENAME, $0 }' files

-v name=something选项将分配something代码中name变量awk,并将用作与包含给定字符串的fasta标头行匹配的正则表达式的一部分。

最后一部分的输出awk可能类似于

file:   >species one; trnF(ggc)
file:   GGCCC
file:   AACGC
--
file1:  >species one; trnF(ggc)
file1:  GGCCC
file1:  AACGC
--

:后面的制表符用作文件名和数据之间的分隔符,可以通过OFS在命令行上将其设置为其他内容来更改-v OFS=somethingelse

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除第一行中的匹配字符和其他行中的所有字符

grep 计算一行单一模式中的所有匹配项

将与特定模式匹配的所有行放在文件末尾

如何使用sed \ awk在文件中查找某些行,然后匹配与其他模式匹配的所有后续行?

僅保留具有匹配模式的第一行

对于文件A中的每一行,请使用模式替换文件B中的所有匹配行

GREP用于文件中的动态模式,并打印具有先前模式和另一模式的其他行

grep regex模式在每行中匹配,只有所有匹配出现并在同一行上打印

如何将一行中的所有模式匹配提取到列表中

PHP带有编辑/删除模式的while循环仅返回第一行中的ID

比较具有匹配模式的两个连续行,并使用awk删除匹配的第一行

如何将与模式匹配的行追加到前一行

使用条件匹配一行中的多个模式

使用第一行作为参考替换所有行中的特定字符匹配项

正则表达式读取文件并在Python中从文件内部返回匹配模式后的第一行

sed 忽略模式并匹配同一行中的模式

第一行匹配条件,第一行匹配其他条件后

PostgreSQL查询仅加入与模式匹配的第一行

将与模式匹配的行从文件夹中的所有文本文件提取到单个输出文件

保留匹配模式的连续行的每个序列中的仅第一行

如何使用Perl单线添加基于第一行模式匹配的行?

AIX:sed 命令删除除第一行之外的所有行的模式

当一行与模式“ b”匹配时,使用sed打印最后一行以与模式“ a”匹配

将第一行粘贴到新列中-而不粘贴其他所有行

如何将第一行的列值相乘添加到组中的所有其他行?

将第一行与所有其他行合并 大查询

如何使用GREP来确定文件中的每一行是否都与我的模式匹配?

如何grep出与给定模式不匹配的所有行

根据匹配模式将一行代码grep到shell变量中