
私は生物情報学を勉強していますが、長期的な経験がなく、詰まっていました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
答え2
ミラーの使用(https://github.com/johnkerl/miller)と実行
mlr --tsv --implicit-csv-header --headerless-csv-output put '$9=gsub($9,"-.+$","")' input >output
あなたはやる
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
| 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/ |
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+
答え3
使用substr
とindex
awk -F '\t' '{$9=substr($9, 0, index($9, "-")-1); print}' input.lst > output.lst && mv output.lst input.lst