私は生物情報学を勉強していますが、長期的な経験がなく、詰まっていましたawk
。
13列のテーブルがあります。
ELL1-XXXXXXXXX
列9には、()ELL1-II_EC_cell1
またはCDK8-XXXXXX
()などのさまざまな文字列バリアントがありますCDK8-213_mCdk8_ChIPseq_Tnaive_stim_CDK8-214_mCdk8_ChIPseq_Tnaive_stim_AS
。
変更しELL1-XXXXX
たい文字列バリアントが200個を超え、他の文字列もより単純な文字列に変更したいと思います。ELL1
CDK8
頑張った
awk -F '\t' '{gsub("CDK8-213_mCdk8_ChIPseq_Tnaive_stim_CDK8-214_mCdk8_ChIPseq_Tnaive_stim_AS","CDK8",$9); print}' input.lst > output.lst && mv output.lst input.lst
ところで、その文字列を一つずつ見つけて置き換えなければなりません。私はたくさんのフォーラムスレッドを読みましたが、私のファイルで動作するコマンドが見つかりませんでした。
以下は、入力として使用される4つのサンプルラインです。
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL1-II_EC_cell121 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL2-II_EC_cell210 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1-BCL6-Fast-C57-Rep1-ChIP-seq NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No DNMT3A-Dnmt3a1_BioChIPSeq_r1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
予想出力:
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No ELL2 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculus None No DNMT3A NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
ご覧のとおり、次の文字列が置き換えられました。
ELL1-II_EC_cell121
-> ELL1
ELL2-II_EC_cell210
-> ELL2
EP1-BCL6-Fast-C57-Rep1-ChIP-seq
-> EP1
DNMT3A-Dnmt3a1_BioChIPSeq_r1
-> DNMT3A
ベストアンサー1
タブで区切られたデータを想定すると、次のようになります。
$ awk -F '\t' -v OFS='\t' '{ sub("-.*", "", $9); print }' file
DRX154054 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No ELL1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154054/
DRX154053 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No ELL2 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154053/
ERX3608304 ILLUMINA SINGLE ChIP-Seq mm_Unknown_Unknown Mus_musculus None No EP1 NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/ERX/ERX360/ERX3608304/
DRX154052 ILLUMINA SINGLE ChIP-seq mm_embryonicstemcell_embryonicstemcell Mus_musculusNone No DNMT3A NA NA NA ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByExp/sra/DRX/DRX154/DRX154052/
これは、9番目のフィールドに置換を適用するだけで、最初のダッシュ文字で始まるフィールドのすべての項目を削除します。その後、変更されたデータを印刷します。
正規表現は-.*
最初の項目から始まり-
(文字通り「aの-
後に0個以上の文字が続きます」)、sub()
9番目のフィールドに空の置換文字列を使用すると、そのフィールドのすべてのテキスト一致が削除されます。gsub()
入力ラインごとに1つの交換を実行するだけで、ここではそれを使用する必要はありません。
フィールドの1つを変更したので、出力フィールド区切り記号()がタブに設定されていることも確認する必要があります。OFS
それ以外の場合は、出力にスペースで区切られたフィールドが表示されます。明らかに、ブロックを使用してこれを行うこともできますBEGIN
。
awk 'BEGIN { OFS=FS="\t" } { sub("-.*", "", $9); print }' file