Как удалить строки, если n-й столбец содержит определенное слово? - PullRequest
0 голосов
/ 19 мая 2019
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-й столбец этих строк содержит какую-либо строку, кроме экзонического, экзонического, сплайсинга, сплайсинга.

После удаления мой файл будет выглядеть так:

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, но он удаляет ненужные строки. Например, если у меня есть UTR3 в 10-м столбце, он также удалит эту строку, и я этого не хочу. Я использовал эту команду:

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 

Могу ли я получить эту работу?

Заранее спасибо

1 Ответ

4 голосов
/ 19 мая 2019

Используйте awk и регулярное выражение для проверки 4-го столбца.

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

Вывод:

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
...