我正在学习生物信息学,但是我对awk没有很长的经验,现在我被困住了。
我有一张13栏的桌子。
在第9栏中,我有许多字符串的变体,如ELL1-XXXXXXXXX (例如ELL1-II_EC_cell1)或CDK8-XXXXXX (例如CDK8-213_mCdk8_ChIPseq_Tnaive_stim_CDK8-214_mCdk8_ChIPseq_Tnaive_stim_AS)。
我有>200个变体的ELL1-XXXXX字符串,我想要更改为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
发布于 2019-12-26 14:53:06
假设有制表符分隔的数据:
$ 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/这只是将替换应用到第九个字段,从该字段中的第一个破折号开始删除所有内容。然后打印修改后的数据。
正则表达式-.*将从第一个-开始匹配(字面意思是“匹配一个-,后面有任何字符的零或多个字符”),使用该表达式sub()和第9个字段上的空替换字符串将删除该字段中所有匹配的文本。请注意,这里不需要使用gsub(),因为我们只需要在输入行中执行一次替换操作。
由于我们修改了其中一个字段,我们还必须确保将输出字段分隔符(OFS)设置为制表符,否则输出中将得到空格分隔的字段。很明显,您也可以使用BEGIN块来完成这个任务:
awk 'BEGIN { OFS=FS="\t" } { sub("-.*", "", $9); print }' file发布于 2019-12-21 11:39:49
使用Miller (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/ |
+------------+----------+--------+----------+----------------------------------------+--------------+------+----+--------+----+----+----+-----------------------------------------------------------------------------------------+发布于 2019-12-26 14:09:18
使用substr和index
awk -F '\t' '{$9=substr($9, 0, index($9, "-")-1); print}' input.lst > output.lst && mv output.lst input.lsthttps://unix.stackexchange.com/questions/557210
复制相似问题