Isto é 4 expressões sed; longa mas simples
Ele adiciona um excesso de zeros à esquerda e, em seguida, reduz os números para 3 e 4 para os lados esquerdo e direito, respectivamente.
É difícil construir algo assim em uma única linha, mas é muito fácil quando é colocado sobre várias linhas, como mostrado na última seção do código ...
printf pode ser uma solução, mas não é tão simples quanto eu pensava, por causa dos números negativos, ie. sua exigência é que todos os números negativos tenham o mesmo número de dígitos que os números positivos.
... então estou lançando esse método sed porque funciona, mas pode haver soluções mais simples ...
sed -r -e "s/^([0-9]+)( : )([0-9]+)( = )(-)?([0-9]+)( )/0000/" -e "s/0*([0-9][0-9][0-9])( : )0*([0-9][0-9][0-9])( = )(-)?0*([0-9][0-9][0-9])( )//" -e "s/( )([0-9]+)( : )([0-9]+)( = )(-)?([0-9]+)( .)$/000000/" -e "s/( )0*([0-9][0-9][0-9][0-9])( : )0*([0-9][0-9][0-9][0-9])( = )(-)?0*([0-9][0-9][0-9][0-9])( .)$//" \
<<'EOF'
261 : 261 = 0 | 1192 : 1184 = 8 |
283 : 283 = 0 | 666 : 659 = 7 |
267 : 267 = 0 | 631 : 620 = 11 |
283 : 283 = 0 | 787 : 781 = 6 |
278 : 279 = -1 | 963 : 957 = 6 |
278 : 279 = -1 | 963 : 954 = -1 |
EOF
Aqui está a saída
261 : 261 = 000 | 1192 : 1184 = 0008 |
283 : 283 = 000 | 0666 : 0659 = 0007 |
267 : 267 = 000 | 0631 : 0620 = 0011 |
283 : 283 = 000 | 0787 : 0781 = 0006 |
278 : 279 = -001 | 0963 : 0957 = 0006 |
278 : 279 = -001 | 0963 : 0954 = -0001 |
Aqui está uma versão mais legível das expressões sed.
sed -r \
-e "s/^\
([0-9]+)( : )\
([0-9]+)( = )(-)?\
([0-9]+)( )\
/0000/" \
-e "s/\
0*([0-9][0-9][0-9])( : )\
0*([0-9][0-9][0-9])( = )(-)?\
0*([0-9][0-9][0-9])( )\
//" \
-e "s/( )\
([0-9]+)( : )\
([0-9]+)( = )(-)?\
([0-9]+)( .)$\
/000000/" \
-e "s/( )\
0*([0-9][0-9][0-9][0-9])( : )\
0*([0-9][0-9][0-9][0-9])( = )(-)?\
0*([0-9][0-9][0-9][0-9])( .)$\
//" \