Você pode usar split
para extrair as duas partes do campo 10 em uma matriz (aqui chamada arr10
) assim:
split($10, arr10, ":")
Em seguida, você pode criar um índice a partir de uma combinação do primeiro elemento desse array e de todo o elemento 14. Usando esse índice, você pode criar dois novos arrays, por exemplo, sum_of_11
e old_15
:
sum_of_11[arr10[1]"\t"$14] += $11 # sum of all rows that have this index
old_15[arr10[1]"\t"$14] = $15 # just the value in the single most recent row
Juntando (e definindo OFS = "\t"
):
awk '{ split($10, arr10, ":");
sum_of_11[arr10[1]"\t"$14] += $11;
old_15[arr10[1]"\t"$14] = $15
} END {
OFS = "\t";
for (i in sum_of_11) {
print i, sum_of_11[i], old_15[i], old_15[i] - sum_of_11[i]
}
}' file
Resultado:
chromosome_1_Contig0.3916 gi|733214878|ref|NM_001303082.1| 477 708 231
chromosome_1_unplaced_Contig0.12366 gi|526117831|ref|NM_001281196.1| 637 1025 388
chromosome_1_unplaced_Contig0.3951 gi|526117967|ref|NM_001281232.1| 107 1518 1411
chromosome_1_unplaced_Contig0.12504 gi|526117831|ref|NM_001281196.1| 314 1025 711
chromosome_1_Contig0.1980 gi|952977790|ref|NM_001317128.1| 849 849 0