awk
:
#!/usr/bin/awk -f
BEGIN { OFS = "\t" }
{
print
print $1 - 1, $2, $3 / 2
print $1 + 1, $2, $3 / 2
print $1, $2 - 1, $3 / 2
print $1, $2 + 1, $3 / 2
}
Isso depende um pouco de como você precisa da saída formatada, é claro. O exemplo acima assume registros de entrada separados por tabulações.
Para remover duplicatas depois disso, canalize a saída por meio de sort -n | uniq
.
Uma variante que não os imprime em primeiro lugar (e assim mantém a ordem original) pode armazenar os valores vistos em uma matriz e imprimir somente os novos:
#!/usr/bin/awk -f
function printnew(a, b, c) {
if(seen[a, b, c] != 1) {
seen[a, b, c] = 1
print a, b, c
}
}
BEGIN { OFS = "\t" }
{
printnew($1, $2, $3)
printnew($1 - 1, $2, $3 / 2)
printnew($1 + 1, $2, $3 / 2)
printnew($1, $2 - 1, $3 / 2)
printnew($1, $2 + 1, $3 / 2)
}