首页 > 解决方案 > 如果第 n 列包含特定单词,如何删除行?

问题描述

chr1    26150023    26150023    ncRNA_exonic    
chr1    26162313    26162313    exonic      
chr1    26349533    26349535    exonic  
chr1    26357656    26357656    UTR5        
chr1    26487940    26487940    exonic  
chr1    26150023    26150023    ncRNA_exonic    
chr1    26162353    26162313    splicing        
chr1    26349533    26349535    exonic;splicing 
chr1    26357656    26357656    exonic      
chr1    26487940    26487940    UTR3    
chr1    26357656    26357656    intronic        
chr1    26487940    26487940    intergenic

我有一个非常大的 csv 文件,它包含数十列和数千行。如果这些行的第 4 列包含除 exonic、exonic、splicing、splicing 之外的任何字符串,我想删除这些行。

删除我的文件后将如下所示:

chr1    26162313    26162313    exonic      
chr1    26349533    26349535    exonic 
chr1    26487940    26487940    exonic  
chr1    26162353    26162313    splicing        
chr1    26349533    26349535    exonic;splicing 
chr1    26357656    26357656    exonic

我尝试使用 sed 但它删除了不需要的行。例如,如果我在第 10 列中有 UTR3,它也会删除该行,我不希望这样。我使用了这个命令:

sed -e '/upstream/d' -e '/downstream/d' -e '/intronic/d' -e '/intergenic/d' -e '/ncRNA_exonic/d' -e '/ncRNA_intronic/d' -e '/ncRNA_splicing/d' -e '/ncRNA_UTR5/d' -e '/UTR3/d' -e '/UTR5/d' input.csv > output.csv 

反正我能得到这个工作吗?

提前致谢

标签: linuxbashawksedterminal

解决方案


使用 awk 和正则表达式来测试第 4 列。

awk '$4 ~ "^(exonic|exonic;splicing|splicing)$"' file

输出:

chr1 26162313 26162313 外显子      
chr1 26349533 26349535 外显子  
chr1 26487940 26487940 外显子  
chr1 26162353 26162313 拼接        
chr1 26349533 26349535 外显子;剪接
chr1 26357656 26357656 外显子

推荐阅读