我有一个很大的文件,它的边缘带有一些数字属性(基因-基因相关值。
Solyc06g071220.1.1 Solyc03g119900.3.1 -0.103908702731133 0.84469789799632
Solyc06g021220.1.1 Solyc06g082440.1.1 -0.224259048700333 0.669250658547268
Solyc06g031220.1.1 Solyc03g062750.1.1 0.71688175201416 0.108887108533016
Solyc06g031220.1.1 Solyc04g055160.3.1 0.0175280850380659 0.973710565052682
Solyc06g041220.1.1 Solyc09g065990.3.1 0.390961289405823 0.443437425098591
Solyc06g031220.1.1 Solyc01g109440.2.1 -0.19314156472683 0.713890096929684
Solyc06g071220.1.1 Solyc06g065310.3.1 -0.0117298867553473 0.982405976825965
Solyc06g071220.1.1 Solyc04g078470.3.1 -0.325205653905869 0.529388185554353
Solyc06g071220.1.1 Solyc01g008510.3.1 0.7591872215271 0.0800037292660498
Solyc04g078470.3.1 Solyc06g031220.1.1 0.891855001449585 0.0169106147650597
Solyc04g055160.3.1 Solyc06g031220.1.1 0.0175280850380659 0.973710565052682
给另一个文件input.txt,它应该能够提取其所有邻居:
Input.txt
Solyc06g031220.1.1
输出:
Solyc06g031220.1.1 Solyc03g062750.1.1 0.71688175201416 0.108887108533016
Solyc06g031220.1.1 Solyc04g055160.3.1 0.0175280850380659 0.973710565052682
Solyc06g031220.1.1 Solyc01g109440.2.1 -0.19314156472683 0.713890096929684
Solyc04g078470.3.1 Solyc06g031220.1.1 0.891855001449585 0.0169106147650597
Solyc04g055160.3.1 Solyc06g031220.1.1 0.0175280850380659 0.973710565052682
由于网络是非定向的,因此A-B和B-A相同,应将其删除。
我已经完成了python的方式,即根据空间分割每一行,并检查了前两个列表元素中是否存在基因ID。但这要花很长时间才能遍历文件。请帮助
file1=open("correlation_v1.txt", 'r')
file2=open("input.txt", "r")
file1_id=file1.readlines()
file2_id=file2.readlines()
for i in file1_id:
gene_id=i.split()
gene_id[0]=gene_id[0].strip()
gene_id[1]=gene_id[1].strip()
for j in file2_id:
loc_id=j.split()
loc_id[0]=loc_id[0].strip()
if ((loc_id[0] == gene_id[0]) or (loc_id[0] == gene_id[1])):
print i,"\t", j
答案 0 :(得分:2)
这可以通过grep
轻松完成:
grep -F -w -f input.txt filename
-F
使其查找文字字符串而不是正则表达式模式。 -w
使其将字符串作为一个整体来查找。并且-f
使它成为从输入文件中搜索的模式。
答案 1 :(得分:1)
如果由于网络是非定向的,则A-B和B-A相同,应将其删除表示在以下情况下:
A B 1 2
B A 1 2
输出应为
A B 1 2
awk:
$ awk '
NR==FNR {s=$0; next }
($1==s||$2==s) && ($1!=a[$2]&&$2!=a[$1]) {
a[$1]=$2
a[$2]=$1
print
}' <(echo A) file
输出:
A B 1 2
输出您的数据(awk '...' input.txt file
):
Solyc06g031220.1.1 Solyc03g062750.1.1 0.71688175201416 0.108887108533016
Solyc06g031220.1.1 Solyc04g055160.3.1 0.0175280850380659 0.973710565052682 # this is a duplicate
Solyc06g031220.1.1 Solyc01g109440.2.1 -0.19314156472683 0.713890096929684
Solyc06g031220.1.1 Solyc04g078470.3.1 -0.325205653905869 0.529388185554353