Grep

當涉及帶編號的單詞時,Grep 特定行

  • September 3, 2021

我有一個具有以下結構的文件。

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。我需要整條線。

我該如何解決這個問題?

你可以試試這個grep '\<chr1\>' filename.txt > output.txt

grep不是“貪婪”。它只是在行上查找給定的模式,如果在行的任何位置找到該模式,則列印整行。或者,如果-o給出,它只列印匹配的部分。

您顯示的所有行都包含字元串chr1。其中一個緊隨其後的是一個空格,而在三個中,緊隨其後的是其他東西。但這沒關係,它仍然是每一行上的那個字元串。

如果要檢查該行的第二個欄位是否正是給定的字元串,請使用 awk 之類的工具來處理此類基於欄位的文本輸入。

例如

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

引用自:https://unix.stackexchange.com/questions/667478