2016-05-20 6 views
1

У меня есть файл, который выглядит следующим образом:удалить строки с СЕПГ и регулярным выражением

rs994321 - chr6_ssto_hap7 712891 G A 0.011180599999999999  0.0058201 62357 
rs994321 - chr6_mcf_hap5 675532 G A 0.011180599999999999 0.0058201 62357 
rs994321 - chr6_mann_hap4 675338 G A 0.011180599999999999 0.0058201 62357 
rs994321 - chr4_dbb_hap3 675681 G A 0.011180599999999999 0.0058201 62357 
rs994321 - chr4_cox_hap2 891136 G A 0.011180599999999999 0.0058201 62357 
rs994321 - chr6 29372356 G A 0.011180599999999999 0.0058201 62357 
rs9943219 + chr1 238691947 A G 0.00700761 0.00727069 62357 
rs9943217 + chr1 238691673 A G 0.00663929 0.00715566 62357 

Я хотел бы удалить строки с шаблоном chr*_*_hap*. В моем примере должны оставаться только последние 3 строки. Я попытался с помощью следующих команд, но они не работают:

sed '/chr[0-9]_*_hap[0-9]/d' test.txt 
sed '/*_hap[0-9]/d' test.txt 
sed '/\*_hap[0-9]/d' test.txt 

Я не очень хорошо с использованием регулярного выражения

ответ

2
$ egrep -v '\bchr([^_]*_){2}hap[0-9]\b' data 
rs994321 - chr6 29372356 G A 0.011180599999999999 0.0058201 62357 
rs9943219 + chr1 238691947 A G 0.00700761 0.00727069 62357 
rs9943217 + chr1 238691673 A G 0.00663929 0.00715566 62357 

или с помощью sed:

$ sed -r '/\bchr([^_]*_){2}hap[0-9]\b/d' data 
rs994321 - chr6 29372356 G A 0.011180599999999999 0.0058201 62357 
rs9943219 + chr1 238691947 A G 0.00700761 0.00727069 62357 
rs9943217 + chr1 238691673 A G 0.00663929 0.00715566 62357 

Использование awk:

$ awk '! /chr[^_]*_[^_]*_hap[0-9]/' data 
rs994321 - chr6 29372356 G A 0.011180599999999999 0.0058201 62357 
rs9943219 + chr1 238691947 A G 0.00700761 0.00727069 62357 
rs9943217 + chr1 238691673 A G 0.00663929 0.00715566 62357 
+0

Полное и приятное :-) – sjsam

+0

Полностью, согласен с @sjsam, огромное спасибо! – user2380782

+0

'. *' S в конце REs ничего не делают, удаляют их. Аналогично удалите '{print}' из оператора awk. Регулярные выражения должны быть действительно «chr [^ _] * _ [^ _] * _ hap', чтобы быть более надежными, и это можно было бы свести к' chr ([^ _] * _) {2} hap' для краткости с большей команд. Обычно вы также должны добавлять привязки и/или идентифицировать определенное поле, но, вероятно, это нормально для этого формата ввода. –

Смежные вопросы