Eu tenho um arquivo de texto no seguinte formato:
c4 c4 r4 c8 c8 e2 e2 c1
c4 c4 r4 c8 c8 c1 e2 e2
c4 c4 r4 e2 e2 c8 c8 c1
c4 c4 r4 e2 e2 c1 c8 c8
c4 c4 r4 c1 e2 e2 c8 c8
c4 c4 r4 c1 c8 c8 e2 e2
c4 c4 c8 c8 r4 e2 e2 c1
c4 c4 c8 c8 r4 c1 e2 e2
c4 c4 c8 c8 e2 e2 r4 c1
c4 c4 c8 c8 e2 e2 c1 r4
c4 c4 c8 c8 c1 e2 e2 r4
c4 c4 c8 c8 c1 r4 e2 e2
c4 c4 e2 e2 c8 c8 r4 c1
c4 c4 e2 e2 c8 c8 c1 r4
c4 c4 e2 e2 r4 c8 c8 c1
Quero remover todos os números das colunas que se repetem dentro da linha, mas sempre manter a primeira abordagem, também quando o valor foi alterado por outro número - para que a saída fique assim:
c4 c r c8 c e2 e c1
c4 c r c8 c c1 e2 e
c4 c r e2 e c8 c c1
c4 c r e2 e c1 c8 c
c4 c r c1 e2 e c8 c
c4 c r c1 c8 c e2 e
c4 c c8 c r4 e2 e c1
c4 c c8 c r4 c1 e2 e
c4 c c8 c e2 e r4 c1
c4 c c8 c e2 e c1 r4
c4 c c8 c c1 e2 e r4
c4 c c8 c c1 r4 e2 e
c4 c e2 e c8 c r4 c1
c4 c e2 e c8 c c1 r4
c4 c e2 e r4 c8 c c1
Os números possíveis são (1-64)
Com GNU¹
sed
, você poderia fazer:O mesmo com
perl
:Em ambos, substituímos
<word-boundary><letter><digits><word-boundary><any-amount-of-letters-and-whitespace><word-boundary><letter><same-digits><word-boundary>
pelo mesmo com<same-digits>
removido e repetimos enquanto houver substituição (usandot
ouwhile
)¹ os GNUisms lá são
:
comandos sendo seguidos por outro comando, no padrãosed
você precisaria-e
de xpressions separadas,-E
(na verdade um BSDism),\<
/\>
(na verdade um ex/vi'ism, algum outrosed
s support[[:<:]]
,[[:>:]]
ou\b
como equivalentes).