我正在尝试匹配并从两个文件中提取一些列表。我将通过一个例子更好地解释它。
我有两个文件
List
gene1
gene2
gene3
MainFile
chr17 70593167 70593381 exon . + gene10
chr17 70593167 70593381 intron . + gene1
我想从MainFile中匹配并提取基因列表。这个的输出将是
chr17 70593167 70593381 intron . + gene1
我也希望找到不匹配的。这个的输出将是
chr17 70593167 70593381 exon . + gene10
答案 0 :(得分:0)
尝试这样的事情:
egrep "$(echo $(<List)|sed 's/ /$|/g')$" MainFile > Matches
egrep -v "$(echo $(<List)|sed 's/ /$|/g')$" MainFile > NonMatches
它在sed和bash替换的帮助下将List转换为正则表达式,然后使用egrep搜索MainFile。
如果List是一个大文件,这可能无法正常工作。
答案 1 :(得分:0)
这个ruby解决方案应该比我的shell版本更快:
#!/usr/bin/ruby
list = File.read("List").split
File.open("Matches","w"){|match|
File.open("NonMatches","w"){|non|
File.open("MainFile").each{|line|
if list.include?(line.split[6])
match.print(line)
else
non.print(line)
end
}
}
}