当涉及编号单词时,Grep 特定行

当涉及编号单词时,Grep 特定行

我有一个具有以下结构的文件。

name #chrom chromStart chromEnd encodeLabel description
EH38E1310153 chr1 181251 181601 pELS EH38E1310153
EH38E1310154 chr2 190865 191071 dELS EH38E1310154
EH38E1310158 chr3 778562 778912 PLS EH38E1310158
EH38E1310159 chr4 779086 779355 PLS EH38E1310159
EH38E1310160 chr8 779727 780060 pELS EH38E1310160
EH38E1310162 chr17 790397 790626 CTCF-only EH38E1310162
EH38E1310164 chr18 807736 807916 dELS EH38E1310164
EH38E1310165 chr19 812113 812266 dELS EH38E1310165

chr1我只需要 和 的线条。这是我到目前为止所尝试过的:

grep 'chr1' filename.txt > Output.txt

这会拉出以下几行:

EH38E1310153 chr1 181251 181601 pELS EH38E1310153
EH38E1310162 chr17 790397 790626 CTCF-only EH38E1310162
EH38E1310164 chr18 807736 807916 dELS EH38E1310164
EH38E1310165 chr19 812113 812266 dELS EH38E1310165

当我需要具体的时候,默认的 grep 搜索似乎是贪婪的。我不需要chr1*。我尝试了该-o标志,但这只是返回chr1。我需要整条线。

我该如何解决这个问题?

答案1

grep不是“贪婪”。它只是在行上查找给定的模式,如果找到该模式则打印整行任何地方在线上。或者,如果-o给出了,它只打印匹配的部分。

您显示的所有行都包含字符串chr1。在其中一个中,紧接着是一个空格,在三个中,紧接着是其他内容。但这并不重要,每一行仍然是那个字符串。

如果您想检查该行的第二个字段是否正是给定的字符串,请使用 awk 等可以处理此类基于字段的文本输入的工具。

例如

awk -v value=chr1 '$2 == value' < filename.txt > Output.txt

答案2

你可以试试这个grep '\<chr1\>' filename.txt > output.txt

相关内容