Awk
solução:
awk 'BEGIN{ head = "Geneid" }
FNR == 2{
gsub(/^.+documents\/|\.sorted\.bam$/, "", $NF);
head = head "\t" $NF
}
FNR > 2{
genes[$1] = genes[$1] "\t" $NF;
order[FNR-2] = $1
}
END{
print head;
for (i = 1; i <= FNR-2; i++) print order[i] genes[order[i]]
}' file*.txt
-
FNR
- número de registro sendo lido -
$NF
- o último valor do campo (NF
aponta para o número total de campos) -
genes
- array contendo a sequência acumulada dos últimos valores de campo por gene id; a matriz é indexada por gene ids -
order
- matriz auxiliar indexada com números de registro para manter a ordem inicial de genes ids