r - 合并部分匹配的字符串

标签 r perl pattern-matching

我正在努力尝试从两个文件中组合部分匹配的字符串。

文件 1 包含一个唯一字符串列表。这些字符串与文件 2 中的多个字符串部分匹配。对于每个匹配的案例,如何将文件 1 中的行与文件 2 合并

文件 1

mmu-miR-677-5p_MIMAT0017239
mmu-miR-181a-1-3p_MIMAT0000660

文件 2
mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGA
mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGACT
mmu-miR-677-5p_TTCAGTGATGATTAGCTTCTGACT
mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTAC
mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTACC

期望输出
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGA
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGACT
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_TTCAGTGATGATTAGCTTCTGACT
mmu-miR-181a-1-3p_MIMAT0000660  mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTAC
mmu-miR-181a-1-3p_MIMAT0000660  mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTACC

我试过使用 pmatch()在 R 中,但不正确。我看起来像 perl 会处理的东西?

也许是这样的:
perl -ne'exec q;perl;, "-ne", q $print (/\Q$.$1.q;/?"$. YES":$. .q\; NO\;);, "file2" if m;^(.*)_pat1;' file1

最佳答案

这是一个简短的 Perl 解决方案,它保存了来自 file1 的所有数据。在散列中,然后将其检索为 file2被扫描

use strict;
use warnings;
use autodie;

my @files = qw/ file1.txt file2.txt /;

my %file1 = do {
  open my $fh, '<', $files[0];
  map /([^_]+)_(\S+)/, <$fh>;
};

open my $fh, '<', $files[1];
while (<$fh>) {
  my ($key) = /([^_]+)/;
  printf "%-32s%s", "${key}_$file1{$key}", $_;
}

输出
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGA
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_CTTCAGTGATGATTAGCTTCTGACT
mmu-miR-677-5p_MIMAT0017239     mmu-miR-677-5p_TTCAGTGATGATTAGCTTCTGACT
mmu-miR-181a-1-3p_MIMAT0000660  mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTAC
mmu-miR-181a-1-3p_MIMAT0000660  mmu-miR-181a-1-3p_ACCATCGACCGTTGATTGTACC

关于r - 合并部分匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229116/

相关文章:

R: `rm(list=ls())` 是做什么的?

perl - 为什么我的 Perl 脚本会提示 'Global symbol "$connection"requires explicit package name'?

opencv - 用旋转的 Gabor 核过滤的图像差异很大

r - 如何更改数据框中的时区?

r - igraph + R 顶点按条件着色(最好是连续颜色)

r - 如何将箱线图添加到带有抖动的散点图

arrays - Perl:将文件加载到哈希中

perl CGI.pm : lists vs strings to build pages

sql - 将查询与 SQL 中的正则表达式匹配?

regex - Elasticsearch 正则表达式从右边获取最后7位数字