我没有删除重复的行,而是想要删除两个文件之间找到的唯一行。文件格式不同。
文件1:
m160505_031746_42156_s1_p0|105337|10450_16161
m160505_031746_42156_s1_p0|104750|20537_27903
m160505_031746_42156_s1_p0|103809|17563_25308
m160505_031746_42156_s1_p0|103217|8075_11486
文件2(标签分隔):
acCAATCCCATCACCATCtt m160505_031746_42156_s1_p0|105337|10450_16161
atTAAAATACCATTATATgg m160505_031746_42156_s1_p0|104750|20537_27903
caAACTCCAACTACGAACtg m160505_031746_42156_s1_p0|103809|17563_25308
atCTATTTAAACCTAATCgg m160505_031746_42156_s1_p0|103217|8075_11486
acCAATCCCATCACCATCtt m160505_031746_42156_s1_p0|152092|36592_40830
atTAAAATACCATTATATgg m160505_031746_42156_s1_p0|143825|13009_23809
caAACTCCAACTACGAACtg m160505_031746_42156_s1_p0|143710|0_20191
atCTATTTAAACCTAATCgg m160505_031746_42156_s1_p0|140833|25358_34709
文件2与第2列中的文件1具有相同的行,在第1列中以20个字母开头。第1列中的20个字母模式在文件2中重复(多次,多于两次),具有唯一的关联序列每次出现。
我想将文件1中的序列与文件2中的第二列匹配。如果匹配,我想为每个匹配生成一个包含两列的新文件,保持文件2之间的关系两列。实际上,我希望简单地删除文件2中没有文件1中的第2列匹配的行。
我意识到我的代码需要帮助,但到目前为止,这是我所拥有的更多关于我如何思考的想法。我可能最终需要使用哈希,尽管由于第1列中的重复而我担心这样做。我不想丢失这些以及它们与第2列的关系。
use strict;
use warnings;
open(OUT, '>', '/path/to/out.txt') or die $!;
open(FMT0, '<', '/path/to/fmt0.txt') or die $!;
my $regex = qr/m160505_.*/;
while(my $line = <FMT0>){
$line =~ $regex;
open(FMT6, '<', '/path/to/fmt6.txt') or die $!;
while(my $zero_fmt = <FMT6>){
if ($zero_fmt =~ /([A-Z]{20})\t($line)/i){
print OUT $zero_fmt;
}
}
}
感谢您的帮助!
答案 0 :(得分:2)
这样的事情可能会完成工作。 : - )
grep -f <(grep ^m160505_ file1) file2
这是一个Perl解决方案,因为这就是你所问的:
#!/usr/bin/env perl
use strict;
use warnings;
die "usage: $0 <file1> <file2>\n"
unless @ARGV == 2;
open(my $file1, '<', $ARGV[0])
or die "Could not open file1: $!\n";
my %keys;
while (<$file1>) {
chomp;
$keys{$_} = 1 if /^m160505_/;
}
close($file1);
open (my $file2, '<', $ARGV[1])
or die "Could not open file2: $!\n";
while (<$file2>) {
chomp;
my ($key) = /\t(.+)$/;
print "$_\n" if $keys{$key};
}
close($file2);
行动中:
$ grep -f <(grep ^m160505_ file1) file2
acCAATCCCATCACCATCtt m160505_031746_42156_s1_p0|105337|10450_16161
atTAAAATACCATTATATgg m160505_031746_42156_s1_p0|104750|20537_27903
caAACTCCAACTACGAACtg m160505_031746_42156_s1_p0|103809|17563_25308
atCTATTTAAACCTAATCgg m160505_031746_42156_s1_p0|103217|8075_11486
$ ./atgc.pl file1 file2
acCAATCCCATCACCATCtt m160505_031746_42156_s1_p0|105337|10450_16161
atTAAAATACCATTATATgg m160505_031746_42156_s1_p0|104750|20537_27903
caAACTCCAACTACGAACtg m160505_031746_42156_s1_p0|103809|17563_25308
atCTATTTAAACCTAATCgg m160505_031746_42156_s1_p0|103217|8075_11486