我想根据第三列(标识符)创建单词对。我的文件与此示例类似:
A ID.1
B ID.2
C ID.1
D ID.1
E ID.2
F ID.3
我想要的结果是:
A C ID.1
A D ID.1
B E ID.2
C D ID.1
请注意,我不想以相反的顺序获得相同的单词对。在我的真实文件中,有些单词以不同的标识符出现多次。
我尝试了这段代码,效果很好,但需要很多时间(而且我不知道是否有冗余):
counter=2
cat filtered_go_annotation.txt | while read f1 f2; do
tail -n +$counter go_annotation.txt | grep $f2 | awk '{print "'$f1' " $1}';
((counter++))
done > go_network2.txt
“tail”用于在读取行时删除该行。
Awk
解决方案:
awk '{ a[$2] = ($2 in a? a[$2] FS : "") $1 }
END {
for (k in a) {
len = split(a[k], items);
for (i = 1; i <= len; i++)
for (j = i+1; j <= len; j++)
print items[i], items[j], k
}
}' filtered_go_annotation.txt
输出:
A C ID.1
A D ID.1
C D ID.1
B E ID.2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)