gpt4 book ai didi

linux - 如何在 linux 中删除列中的特定文本

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:58 25 4
gpt4 key购买 nike

我有一个包含 3 列的多行文件,如下所示:

col1    set=SamSNP;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;Gene.ensGene=ENSCAFG00000000009.3;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;GeneDetail.ensGene=.;ALLELE_END    GT:PL

我需要删除从“ANNOVAR_DATE”开始的文本,直到第 3 列中下一次出现“ANNOVAR_DATE”。所需的输出如下所示:

col1    set=SamSNP;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;GeneDetail.ensGene=.;ALLELE_END  GT:PL

在 linux 中有什么解决方案吗?

最佳答案

这里有一个使用 sed 的方法

sed -e 's/\(.*\)\(ANNOVAR_DATE=[^;]*;\).*ANNOVAR_DATE=*[^;]*;\(.*\)/\1\2\3/' <filename>

这会将行分成 4 个部分:

a) ANNOVAR_DATE 之前的所有字符,
b) ANNOVAR_DATE 部分的第一个实例,
c) 直到并包括 ANNOVAR_DATE 的下一个实例的所有内容
d) 线路的其余部分。

'c'被丢弃,a、b、d被存储并打印。

\(.*\) 存储为 \1

\(ANNOVAR_DATE=[^;]*;\) 这部分,包括实际日期和分号存储为 \2

.*ANNOVAR_DATE=*[^;]*; 这将选择下一个 ANNOVAR_DATE 部分之前的所有内容并将其丢弃

最后,\(.*\) 将该行的其余部分存储为 \3

关于linux - 如何在 linux 中删除列中的特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com