2014-09-27 4 views
-5

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

file1

ACUGUACAGGCCACUGCCUUGC 
CUGCGCAAGCUACUGCCUUGCU 
UGGAAUGUAAAGAAGUAUGUAU 
CGAAUCAUUAUUUGCUGCUCUA 
AUCACAUUGCCAGGGAUUACC 
UUCACAGUGGCUAAGUUCUGC 

file2

CCAGGCUGAGGUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUAACUGUACAGGCCACUGCCUUGCCAGG 
CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGCUACUGCCUUGCUAG 
GCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUAUGGAAUGUAAAGAAGUAUGUAUUUCAGGC 
CUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUGCGAAUCAUUAUUUGCUGCUCUAG 
GGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAAAUCACAUUGCCAGGGAUUACCACGCAACC 

пример:

file1:

            GCUGUGGAGAUAACUGCGC 

file2

CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGC 

выход

CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCC 

ответ

1

Вот несколько способов только сохранить текст, который ком es перед вашим рисунком, если он существует

a <- "GCUGUGGAGAUAACUGCGC" 
b <- "CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGC" 

strsplit(b, a)[[1]][1] 
sub(paste0(a, ".*$"), "", b) 

Теперь вам просто нужно прочитать файлы в R и закольцевать по каждому шаблону. Я не совсем уверен, что вы ищете, но вот идея

# read data into 2 variables, a and b 
# you could use readLines() to do read from disk 
a <- readLines(textConnection("ACUGUACAGGCCACUGCCUUGC 
CUGCGCAAGCUACUGCCUUGCU 
UGGAAUGUAAAGAAGUAUGUAU 
CGAAUCAUUAUUUGCUGCUCUA 
AUCACAUUGCCAGGGAUUACC 
UUCACAGUGGCUAAGUUCUGC")) 

b <- readLines(textConnection("CCAGGCUGAGGUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUAACUGUACAGGCCACUGCCUUGCCAGG 
CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGCUACUGCCUUGCUAG 
GCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUAUGGAAUGUAAAGAAGUAUGUAUUUCAGGC 
CUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUGCGAAUCAUUAUUUGCUGCUCUAG 
GGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAAAUCACAUUGCCAGGGAUUACCACGCAACC")) 

Теперь цикл по каждому значению из первого файла

lapply(a, function(x) sapply(strsplit(b, x), "[", 1)) 
+0

@ GracieD: Каждый элемент вывода идентичен.Попробуйте: ll = lapply (a, function (i) sapply (strsplit (b, a [i]), "[[", 1)); для (i in 2: length (ll)) print (идентичный (ll [[i]], ll [[i-1]])) – rnso

+0

@rnso спасибо. обновлено. – GracieD

1

Открытие файла дескрипторы строк для тестирования:

use strict; 
use warnings; 
use autodie; 

open my $fh1, '<', \ "ACUGUACAGGCCACUGCCUUGC\nCUGCGCAAGCUACUGCCUUGCU\nUGGAAUGUAAAGAAGUAUGUAU\nCGAAUCAUUAUUUGCUGCUCUA\nAUCACAUUGCCAGGGAUUACC\nUUCACAGUGGCUAAGUUCUGC\n"; 
open my $fh2, '<', \ "CCAGGCUGAGGUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUAACUGUACAGGCCACUGCCUUGCCAGG\nCUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGCUACUGCCUUGCUAG\nGCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUAUGGAAUGUAAAGAAGUAUGUAUUUCAGGC\nCUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUGCGAAUCAUUAUUUGCUGCUCUAG\nGGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAAAUCACAUUGCCAGGGAUUACCACGCAACC\n"; 

while (!eof $fh1 && !eof $fh2) { 
    chomp(my $line1 = <$fh1>); 
    chomp(my $line2 = <$fh2>); 

    print join(' ', split /$line1/, $line2, 2), "\n"; 
} 

Выходы:

GUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUA CAGG 
CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAA AG 
GCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUA UUCAGGC 
CUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUG G 
GGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAA ACGCAACC 
1

Вы даже можете попробовать это ниже кода Perl для до, после и матч строки, используя $ PREMATCH ($ `), $ POSTMATCH ($ ') и $ MATCH ($ &):

InputFiles:

file1.txt:

ACUGUACAGGCCACUGCCUUGC 
CUGCGCAAGCUACUGCCUUGCU 
UGGAAUGUAAAGAAGUAUGUAU 
CGAAUCAUUAUUUGCUGCUCUA 
AUCACAUUGCCAGGGAUUACC 
UUCACAGUGGCUAAGUUCUGC 

file2.txt:

CCAGGCUGAGGUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUAACUGUACAGGCCACUGCCUUGCCAGG 
CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAACUGCGCAAGCUACUGCCUUGCUAG 
GCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUAUGGAAUGUAAAGAAGUAUGUAUUUCAGGC 
CUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUGCGAAUCAUUAUUUGCUGCUCUAG 
GGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAAAUCACAUUGCCAGGGAUUACCACGCAACC 

Код:

use strict; 
use warnings; 

open my $fh1, '<', "file1.txt" or die "Couldnt open the file file1.txt : $!"; 
open my $fh2, '<', "file2.txt" or die "Couldnt open the file file2.txt : $!"; 

while(!eof $fh1 && !eof $fh2) 
{ 
    chomp(my $line1 = <$fh1>); 
    chomp(my $line2 = <$fh2>); 

    if($line2 =~ /$line1/isg) 
    { 
      print "Prematch: $`\n";   
      print "Postmatch: $'\t"; 
      } 
    }  
close($fh1); 
close($fh2); 

Выход:

Prematch: CCAGGCUGAGGUAGUAGUUUGUACAGUUUGAGGGUCUAUGAUACCACCCGGUACAGGAGAUA Postmatch: CAGG 
Prematch: CUGGCUGAGGUAGUAGUUUGUGCUGUUGGUCGGGUUGUGACAUUGCCCGCUGUGGAGAUAA Postmatch: AG 
Prematch: GCUUGGGACACAUACUUCUUUAUAUGCCCAUAUGAACCUGCUAAGCUA Postmatch: UUCAGGC 
Prematch: CUGUAGCAGCACAUCAUGGUUUACAUACUACAGUCAAGAUG Postmatch: G 
Prematch: GGCUGCUUGGGUUCCUGGCAUGCUGAUUUGUGACUUGAGAUUAAA Postmatch: ACGCAACC