基本的なgrep / awkヘルプ - ファイル内の用語のリストを含むすべての行を別々のファイルに抽出します。

基本的なgrep / awkヘルプ - ファイル内の用語のリストを含むすべての行を別々のファイルに抽出します。

約500の遺伝子名を持つ1つの列のみをgenelist.txt含むdata.txt2つのファイルがありますが、タブ区切りファイルには約1000の列(サンプル)と約30,000の行(遺伝子名)が含まれています。プログラム全体を以下に説明する。genelist.txtdata.txtdata.txt

       Sample 1 Sample 2 Sample 3 Sample 4  Gene A      1.04       1.81        1.92        0.45     Gene B      1.11       1.12        1.32        0.92     Gene C      0.72       0.71        0.85        1.12     Gene D      1.19       1.42        0.13        0.32   

data.txt約500個の遺伝子名のそれぞれから各行(すべての行、つまりすべてのサンプル)を抽出し、genelist.txtこれらの行を別々のファイルに抽出する必要があります。 grepやawkを使うように言われてこれを行う方法を調べましたが、コーディングの経験がほとんどない単純な生物学者として、少し難しさがあります。誰かがこれがどのように行われるかを説明し始めるために必要ないくつかのコードを提供できますか?

抽出がの完全な遺伝子名と一致する用語だけを返すとよいでしょうgenelist.txt。たとえば、私が持っている場合ABC123しかし、ABC1234genelist.txt私はほしいだけABC123抽出されたものではなく抽出されたものABC1234

また、これを行った後、genelist.txt抽出に含まれていない遺伝子をどのように確認できますか? (つまり、一部の遺伝子の名前が間違っている可能性があるため、戻って代替名および/または正しい名前を使用して再抽出する必要があります。)

ベストアンサー1

data.txt以下にリストされた遺伝子から行を抽出するにはgenelist.txt:

grep -w -F -f genelist.txt data.txt > newdata.txt

grep使用されたオプション:

  • -w単語全体に一致するように指示しますgrep(つまり、ABC123どちらも一致しませんABC1234)。
  • -F正規表現の代わりに固定文字列(プレーンテキスト)を検索する
  • -f genelist.txtファイルから検索パターンを読む

ヘッダ行も必要な場合(例1、例2など):

grep -w -F -f genelist.txt -e Sample data.txt > newdata.txt
  • -e Sample「サンプル」を検索することもできます。

genelist.txt存在しない行を見つけるには、次のようにしますnewdata.txt

grep -v -w -F -f <(sed -E -e 's/(\t|  +).*//' newdata.txt) genelist.txt
  • -v検索を逆にして一致しない行を印刷します。

残りのgrepオプションは同じですが、そのオプションを含むファイルを使用する代わりに、-f次のファイルを使用します。プロセスの交換(望むより返品)、これにより実際のファイルの代わりにコマンドを使用できます。このコマンドで生成されたすべての出力は、「ファイル」の内容と見なされます。

sed -E -e 's/(\t| +).*//' newdata.txtこの例では、最初のTAB文字または最初に表示される空白ペア内のすべての項目を削除してから、newdata.txtの各行を出力するコマンドを使用します。つまり、最初のフィールド(「遺伝子A」など)です。 a)データがスペースで区切られているかTABで区切られているかどうかはわかりません。b)例の最初のフィールドにスペースが含まれているため、TABまたはダブルスペースを使用する必要があります。

sed使用されたオプション:

  • -E(拡張正規表現を使用すると、一般的な、およびを使用できます。これは)、でエスケープするよりも+読みやすくなります。\\(\)\+
  • -e 's/(\t| +).*//'入力に適用する sed スクリプト (newdata.txt) を指定します。

例でこのコマンドを実行すると、data.txt次の出力が生成されます。

$ sed -E -e 's/(\t|  +).*//' data.txt

Gene A
Gene B
Gene C
Gene D

それにもかかわらず、このコマンドの出力はsedこのコマンドの検索パターンのリストとして使用されますgrep

おすすめ記事