2015-06-18 17 views
1

Я пытаюсь изменить всю информацию о координатах в файле fastq на нули. Мой входной файл состоит из миллионов записей в следующем повторяющейся структуре 4 строки:Поиск и замена числовой строки между двоеточиями, перед пробелом, с помощью sed?

@HWI-SV007:140:C173GACXX:6:2215:16030:89299 1:N:0:CAGATC 
GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAG 
+    
@@@FFFDFHGGDHIIHGIJJJJJJJJJJJGIJJJJJJJIIIDHGHIGIJJIIIJJIJ 

Я хотел бы заменить две числовые строки в первой строке 16030:89299 с нулями в общем виде, таким образом, что любой числовой строка между двоеточиями, перед пространством, заменяется. Я хотел бы, вывод выглядеть следующим образом, заменив две строки глобально по всему файлу с нулями:

@HWI-SV007:140:C173GACXX:6:2215:0:0 1:N:0:CAGATC 
GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAG 
+    
@@@FFFDFHGGDHIIHGIJJJJJJJJJJJGIJJJJJJJIIIDHGHIGIJJIIIJJIJ 

Я пытающийся сделать это с помощью следующих СЕПГ:

sed 's/:^[0-9]+$:^[0-9]+$\s/:0:0 /g' 

Однако это делает не ведут себя так, как ожидалось.

+1

Я не знаю SED, но '' 'не означает начало строки там? а также '' 'конец? Опять же, не зная SED, я думаю, что вы хотите ': [0-9] + ?:' – chris85

+0

Нужно ли это делать? – Braiam

ответ

1

Думаю, вам нужно использовать опцию sed -r. Также, ^ соответствует началу строки и $ соответствует концу строки. Таким образом, это командная строка, которая работает против вашего образца.

sed -r 's/:[0-9]+:[0-9]+\s/:0:0 /g' 
+0

'$' соответствует концу строки, которая также может быть нескольких строк. '\ n' соответствует концу строки, нет? –

0

некоторые альтернативные

awk -F ":" 'BEGIN{ OFS = ":" }{ if (NF > 1) {$6 = 0; sub(/^[0-9]*/, 0, $7)}; print $0 }' YourFile 

с использованием колонки с помощью отдельного :

sed 's/^\(\([^:]*:\)\{5\}\)[^[:blank:]]*/\10:0/' YourFile 

с использованием 5 первый элемент отдельно от : Тана пространства в качестве разделителя

для вашего СЭД

sed 's/:[0-9]+:[0-9]+\(\s\)/:0:0\1/' 
  • ^ и $ являются относительно всей строки не текущее слова
  • варианта, чтобы сохранить исходное пространство вместо того, чтобы заменить пробел (случай несколько или другие аналогичные \t)
  • g не требуется (и лучше не использовать здесь), потому что нормали только 1 вхождения в строку
  • вы должны быть уверены, что шаблон невозможен где-то в другом месте (никогда не пробег после предыдущего номера), потому что это small
Смежные вопросы