Je suis à la recherche d’une solution de revêtement pour rechercher et remplacer en utilisant le caractère sauvage ..
Consortingbution:
>sequence1 ATGCCAAACTGGAACT[A/T]ATTCAATGGCATGGACATAAATTC[A/C]ATACAATTACAAA >sequnce2 ATCAAACCGGTATGTACATT[A,T/G]ATTCATTACTA
sortie:
>sequence1 ATGCCAAACTGGAACTNATTCAATGGCATGGACATAAATTCNATACAATTACAAA >sequnce2 ATCAAACCGGTATGTACATTNATTCATTACTA
Je dois tout remplacer par betwee “[” et “]” avec “N”. la longueur des données peut varier. J’ai pu trouver le modèle en utilisant le script awk mais je ne sais pas comment le remplacer. Aidez-moi, s’il vous plaît..
awk -F'[][]' '{for(i=2;i<=NF;i=i+2) print $i}' 1.fasta
Une autre chose que j’ai essayé est l’éditeur vi
:%s/[.*\]/N/g
en utilisant ci-dessus un, il remplace tout “[A / T] ATTCAATGGCATGGACATAAATTC [A / C]” à N
Essayez de faire ceci:
perl -pe 's/\[.*?\]/N/g' file.txt
EXPLICATIONS (à propos de regex)
s///
est le squelette de substitution de base (pour perl
ou sed
): s/before/after/
s///g
: le modificateur g
à la fin, signifie toutes les occurrences \[
: signifie: un littéral [
(ou autre chose à la place) .
: signifie: n’importe quel caractère *
signifie: 0 ou N caractère (s) ?
dire à la dernière regex d’être en mode pas gourmand Cela dit, j’ai une autre solution amusante :
perl -ne 'print join "N", split /\[.*?\]/;' file.txt
Peut-être plus clair comme ça?! (mais toujours pareil)
perl -ne ' print join( "N", split(/\[.*?\]/) ); ' file.txt
sed 's/\[[^]]*\]/N/g' file
EDIT: explication comme demandé:
Recherchez un littéral “[” ([)> puis une séquence de zéro ou plusieurs non “]” caractères ([^]] *) suivis d’un littéral “]” ()) et remplacez cette chaîne par la lettre N. Faites-le “g” lobalement à travers chaque ligne.
il suffit d’append un autre liner. votre objective est la substitution, pas besoin de jouer avec $ x
awk '{gsub(/\[[^\]]*\]/,"N")}1' file
Cela fonctionne dans l’éditeur vi:
%s/\[[^\]]*\]/N/g