我有一组文件,其中包含以下信息:
ID Score Other
ABR 0.98 NBNMSB
BCG 0.76 NBNMSB
CVD 0.6 NBNMSB
BCG 0.9 VSCVA
CVD 0.56 VSCVA
ABR 0.9 VSCVA
CVD 0.7 BAVSC
BCG 0.4 BAVSC
ABR 0.5 BAVSC
ABR 0.8 NBNMSB
BCG 0.6 NBNMSB
CVD 0.3 NBNMSB
BCG 0.7 VSCVA
CVD 0.0 VSCVA
ABR 0.1 VSCVA
CVD 0.5 BAVSC
BCG 0.8 BAVSC
ABR 1.0 BAVSC
我想计算第一列的得分最大值,即每个第三列的ID,以便结果按第一列分组,并计算第三列得分的最大值,如下所示:
档案ABR.txt
ABR 0.98 NBNMSB
ABR 0.9 VSCVA
ABR 1.0 BAVSC
文件BCG.txt
BCG 0.76 NBNMSB
BCG 0.9 VSCVA
BCG 0.8 BAVSC
和CVD相同,因为文件非常大且有多个这样的文件,目前我正在使用以下代码:
读取ID时;执行
while read line; do
block=$(echo $line | awk '{print $1}')
max_of_score=$(grep $block Negative/fileofinterest*.ext | grep $ID | awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {print max}')
echo $block $max_of_score >> $ID"_max.txt"
done < fileOfcolumn3values.txt
#contains all the possible values of column 3 (in this case NBNMSB, VSCVA, BAVSC)
done < fileOfIdscolumn1.txt
#contains all possible values of column 1 (in this case ABR, BCG, CVD)
我想找到一个比上述算法TIA
更快的代码答案 0 :(得分:1)
您可以在awk
awk '{
if (($1, $3) in a)
{
if ($2 > a[$1, $3]) a[$1, $3] = $2
}
else a[$1, $3] = $2
};
END
{
for (x in a)
{
split(x, b, SUBSEP); print b[1], a[x], b[2] > b[1]".txt"
}
}' file
这会生成
cat ABR.txt
ABR 1.0 BAVSC
ABR 0.98 NBNMSB
ABR 0.9 VSCVA
等等