番号付きの単語が含まれている場合は、特定の行を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私はandラインだけが必要です。これまでに試したことは次のとおりです。

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。そのうちの1つにはスペースがあり、3つには別のものがあります。しかし、それは問題ではありません。各行はまだその文字列です。

行の2番目のフィールドが正確に指定された文字列であることを確認するには、フィールドベースのテキスト入力を処理できるawkなどのツールを使用します。

例えば

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

答え2

あなたはこれを試すことができますgrep '\<chr1\>' filename.txt > output.txt

関連情報