Shell

grep 模式與文件完全匹配,僅在第一列中搜尋

  • December 9, 2020

我有一個這樣的大文件:

denovo1 xxx yyyy oggugu ddddd
denovo11 ggg hhhh bbbb gggg
denovo22 hhhh yyyy kkkk iiii
denovo2 yyyyy rrrr fffff jjjj
denovo33 hhh yyy eeeee fffff

那麼我的模式文件是:

denovo1
denovo3
denovo22

我正在嘗試使用fgrep以僅提取與我的文件中的模式完全匹配的行(所以我想要denovo1但不是denovo11)。我嘗試使用-x完全匹配,但後來我得到了一個空文件。我試過:

fgrep -x --file="pattern" bigfile.txt > clusters.blast.uniq

有沒有辦法只在第一列中進行 grep 搜尋?

你可能想要-w旗幟 - 來自man grep

  -w, --word-regexp
         Select  only  those  lines  containing  matches  that form whole
         words.  The test is that the matching substring must  either  be
         at  the  beginning  of  the  line,  or  preceded  by  a non-word
         constituent character.  Similarly, it must be either at the  end
         of  the  line  or  followed by a non-word constituent character.
         Word-constituent  characters  are  letters,  digits,   and   the
         underscore.

IE

grep -wFf patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

要僅在第一列中強制匹配,您需要修改模式文件中的條目以添加行錨:您還可以使用\b單詞錨而不是命令行-w開關,例如patfile

^denovo1\b
^denovo3\b
^denovo22\b

然後

grep -f patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

請注意,-F如果文件包含正則表達式而不是簡單的固定字元串,則必須刪除該開關。

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