2016-11-14 8 views
-1

Я хочу создать файл, в котором я могу искать и находить шаблон, который нужно изменить в файле Fasta. Команда ниже создает .sh сценарий со всей картины, что он должен соответствовать и изменения:Добавление опции sed для нечувствительности к регистру и замена строки символа в файле FASTA

tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed 's/<$gcenter>/$genbank/g' | " >>script.sh; done 

Мой файл выглядит следующим образом:

#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869 

.sh выглядеть файл, как это:

sed 's/scaffold40/JH739887/g' | sed 's/scaffold112/JH739888/g' | sed 's/scaffold41/JH739889/g' | ...

Но, я хочу, чтобы шаблон был нечувствительным к регистру. Я хочу добавить -e в команду sed 's/<$gcenter>/$genbank/g' | ". Но когда я добавляю флаг, он не печатает в моем скрипте. Любые идеи почему?

tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed -e 's/<$gcenter>/$genbank/g' | " >>script.sh; done 

После того, как мой сценарий, я удалить последнюю трубу и поместить файл Fasta, что я хочу найти и изменить шаблон.

Конечная цель - заменить Scaffold###, который вы видите в строке ниже, на JH######.

>Scaffold410 275 
TGCATTAATATGAGTGTGTGCTGCAAAAGTTCAGGTCATGGTCCGATCATACTTCACATTTTGGTAGCACTTTAAGCAGAGATCGGTTATCCCATTCTGTGGAAGACTCAACACTATCATAAGGTCCCACAGTTTTATTATCCCTCTGCCTCCCGGAATGCCCCCGGCAGTGAGGGGTACCATCTTCTCAGCAGTAAGGATATTCTTCAGGAGTTCCGTGTGAGCTTTCCCGGATTTAGTTCCATTTTTTAAATACTTCCCAATTCTTTGCTTTG 
>Scaffold430 374 
CTTTGTTAACTGAAAGAGCCTCTAAGTAGATGACCAGTGCTCAGTTAGTACAGTATGAATTTTGTTTAATGGAACAGGAAGATTTAGTATTGAGAAGCGGTTAAGGGTTTAACCCAGCCTCCTGTCTGAATGGACCTGAAGAGGGGGGCCGGGAAGAAACCCATGACTGCATTAAAGTGATAGATCTCCAGACATGGGCTAGGGAAGATTTACAAGACACTCCCTGGCCTGAGGGAGAAAATATGTTTATTGATGAGTCTTCAAGGGTGGCAGAAGGGAAGCGATTTACAGGATACACAATCATTAATGGAAGGAAATTAAAGGAAGGGGGGAGATTGTCACCCACCTGGTCAGTTCAGACAGCAGAGCTGTAT 

Я использую команду bash для этого. Но даже после замены флага -e он не работает.

+0

Что вы ожидаемый результат? Кажется, он отлично работает на моей системе Ubuntu. –

+0

Я думаю, что это только потому, что файл был добавлен: 'sed -e 's//JH739887/g' | sed -e 's//JH739888/g' | sed -e 's//JH739889/g' | ' –

+1

О, вы не удалили первый скрипт.sh после того, как вы изменили свой звонок? –

ответ

1

Я знаю, что опаздываю, но, возможно, это послужит и другим людям.

Для решения вопроса О.П., он должен создать script.sh так:

sed -e 's/scaffold40/JH739887/gi' -e 's/scaffold112/JH739888/gi' -e 's/scaffold41/JH739889/gi' ... 
  • -e позволяет включать различные сценарии в той же sed команды.
  • s/<searchText>/<replaceText>/gi поиск и замена g глобально и i Игнорирование случай

То есть, я думаю, что вы на самом деле пытаетесь сделать, это заменить «имя Геном центр» колонка с «GenBank Accession.version» в вашем файле данных.

Если это так, то можно с этим awk команды:

awk '{ if(NR>1)$2=$4; print }' scaffold_names_2.txt > scaffold_names_2.new.txt 

Объяснение

  • awk является языком программирования (C-подобный синтаксис), который работает над строк в текстовых файлах (по одной строке каждый раз).
  • NR содержит номер текущей записи
  • $i содержит поле внутри текущей строки ($1: 1-е поля, $2, 2-я, и так далее)
  • print гравюр текущей строки.

Execution

$ cat scaffold_names_2.txt 
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869 

$ awk '{ if(NR>1) $2=$4; print}' scaffold_names_2.txt > scaffold_names_2.new.txt 

$ cat scaffold_names_2.new.txt 
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 JH739887 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 JH739888 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 JH739889 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 JH739890 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 JH739891 NW_005054301 JH739891 GPS_002009869 

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

  • Нет связанных вопросов^_^