次のデータセットがあります。
AAACCTGCAAGCGAGT-1,ENSG00000000419,DPM1,2
AAACCTGCAAGCGAGT-1,ENSG00000001497,LAS1L,1
AAACCTGCAAGCGAGT-1,ENSG00000002330,BAD,1
AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000002586,CD99,5
AAACCTGCAAGCGAGT-1,ENSG00000002834,LASP1,1
AAACCTGCAAGCGAGT-1,ENSG00000003056,M6PR,1
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2
AAACCTGCAAGCGAGT-1,ENSG00000004059,ARF5,2
AAACCTGCAAGCGAGT-1,ENSG00000004455,AK2,1
AAACCTGCAAGCGAGT-1,ENSG00000004468,CD38,8
AAACCTGCAAGCGAGT-1,ENSG00000004779,NDUFAB1,3
AAACCTGCAAGCGAGT-1,ENSG00000004975,DVL2,1
AAACCTGCAAGCGAGT-1,ENSG00000005022,SLC25A5,6
私は3番目の列に「MT-」パターンを持つミトコンドリア遺伝子を含むデータを取得したいと思います。たとえば、上記のデータセットから次のものを抽出したいとします。
AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2
私は次のコマンドを使用します。
awk '$3 ~/^MT-/ {print $1, $2, $3, $4} final_matrix.csv
しかし、それはうまくいきませんでした。
答え1
デフォルトでは、awkではフィールドをスペースで区切る必要があります。ファイルがコンマで区切られている場合は、コマンド-F
ラインオプションを使用するか、内部awk変数を設定してFS
フィールド区切り文字を適切に設定する必要があります。
出力をコンマで区切るには、これを設定する必要がありますOFS
。
前任者。
$ awk -F, 'BEGIN{OFS=FS} $3 ~ /^MT-/ {print $1, $2, $3, $4}' final_matrix.csv
AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2
答え2
すべての答えは正確で、行全体を印刷することもできます。
そして、フィールド解析は必要ありません。
awk '/,MT-/{print}' final_matrix.csv
答え3
アイデアは正確ですが、列項目を残りの列と区別するawk
ように分離する方法を示すことを忘れました。これで、テキストを区切るための空白だけを探していますが、最終的に行全体を見つけることになりますが、これはまったく見つかりません。したがって、これは単にエラー条件によって引き起こされるものです。$1
$2
$1
$3
$3 ~ ..
まったく印刷する行数。
awk -v FS=, -v OFS=, '$3 ~/^MT-/ {print $1, $2, $3, $4}' final_matrix.csv
答え4
公開した例を考えると、次のことができます。
grep ',MT-/' final_matrix.csv
しかし、awkを使用して3番目のフィールドに集中するには:
awk -F, '$3 ~ /^MT-/' final_matrix.csv
または:
awk -F, 'index($3,"MT-")==1' final_matrix.csv