我有一个以制表符分隔的8列文本文件:
Erythropoietin Receptor Integrin Beta 4 11.7 9.7 164 195 19 3.2
Erythropoietin Receptor Receptor Tyrosine Phosphatase F 10.8 2.6 97 107 15 3.2
Erythropoietin Receptor Leukemia Inhibitory Factor Receptor 12.0 3.6 171 479 14 3.2
Erythropoietin Receptor Immunoglobulin 9 10.4 3.1 100 108 24 3.3
Erythropoietin Receptor Collagen Alpha 1 Xx 10.7 2.7 93 105 18 3.3
Tumor Necrosis Factor Receptor Tumor Necrosis Factor Receptor 5 11.4 3.2 114 114 25 1.7
Tumor Necrosis Factor Receptor Tumor Necrosis Factor Receptor 14 11.1 2.1 99 100 28 1.8
Tumor Necrosis Factor Receptor Tumor Necrosis Factor Receptor 1B 10.9 4.9 133 162 29 1.9
Tumor Necrosis Factor Receptor Tumor Necrosis Factor Receptor 11A 11.5 5.1 130 166 25 1.9第一列和第二列包含蛋白质名称,第八列包含每个蛋白质对之间的“距离”分数。我想删除包含重复蛋白质对的行,只保留距离最小的对(第8列中的最低值)。这意味着对于蛋白A-蛋白B对,除了距离得分最低的那一个之外,我想删除所有的出现。即使蛋白质名称被交换(在不同的列中),这对蛋白质也被认为是重复的。这意味着蛋白A蛋白B与蛋白B蛋白A是相同的。
发布于 2011-09-30 20:17:27
我希望这将是最终的更新^_^
kent$ awk -F'\t' '{if($1$2 in a){
if($8<a[$1$2]){
a[$1$2]=$8;r[$1$2]=$0;
}
}else if ($2$1 in a){
if($8<a[$2$1]){
a[$2$1] = $8;r[$2$1] = $0;
}
}else{
a[$1$2]=$8; r[$1$2]=$0;
}
} END{for(x in r)print r[x]}' yourFile发布于 2011-09-30 19:14:27
类似于以下内容(未经测试):
awk -F'\t' 'END {
for (r in rec) print rec[r]
}
{
if (mina[$1, $2] < $NF || minb[$2, $1] < $NF) {
mina[$1, $2] = $NF; minb[$2, $1] = $NF
rec[$1, $2] = $0
}
}' infilehttps://stackoverflow.com/questions/7609337
复制相似问题