O problema é mesclar linhas, falando livremente. Uma linha pode ser "mesclada" com a linha anterior se sua coordenada de início for igual à coordenada final da linha acima.
As linhas provavelmente correspondem aos recursos genômicos. E o objetivo é mesclar as características que são adjacentes na sequência genômica.
Este é um script awk
que faz isso:
$2 == end {
# This line merges with the previous line.
# Update end and continue with next line.
end = $3;
next;
}
{
# This is an unmergeable line (start doesn't correspond to end on
# previous line).
# If we've processed at least the header line, print the data collected.
# The if statement avoids printing an empty output line at the
# start of the output.
if (NR > 1) {
print chr, start, end, score, len;
}
# Get data from this line.
chr = $1;
start = $2;
end = $3;
score = $4;
len = $5;
}
END {
# At the end of input, print the data as above to output last line.
print chr, start, end, score, len;
}
O script pressupõe entrada classificada e que todas as coordenadas iniciais são estritamente menores que as coordenadas finais (isto é, que todos os recursos estão na cadeia positiva).
Teste:
$ awk -f script.awk data
chr start end score length
chr1 237592 237912 176 320
chr1 521409 521729 150 320
chr1 714026 714346 83 320
chr1 805100 805440 323 340