
Eu tenho a seguinte sequência em um arquivo:
AA
MUi
MUi-j
MUi-N
ABk
ABk-l
ABk-N
MBk(i)
MBk-l(i)
MBk-l(i-j)
MBk-l(i-N)
MBk-N(i-j)
MBk-N(i-N)
Quero dividi-lo em pequenos pedaços: os dois primeiros caracteres sempre existirão, os demais são opcionais. i,j,k,l são números que podem variar de 1 a 191. N é o caractere “N”. Quero ter o seguinte resultado:
AA
MU i
MU i j
MU i N
AB k
AB k l
AB k N
MB k i
MB k l i
MB k l i j
MB k l i N
MB k N i j
MB k N i N
Isso pode ser feito com o AWK patsplit?
Responder1
Através da sed
:
sed 's/^../& /;s/[-()]/ /g' datafile.dat
Responder2
Com GNU awk:
$ gawk -vFPAT='[A-Z]+|[a-z]' 'NF+=0' file
AA
MU i
MU i j
MU i N
AB k
AB k l
AB k N
MB k i
MB k l i
MB k l i j
MB k l i N
MB k N i j
MB k N i N
Observe que isso irá pular linhas vazias, pois depende de um valor de efeito colateral diferente de zero NF+=0
para acionar o padrão print
; se isso for indesejável, você pode usar o método um pouco mais detalhado {NF+=0} 1
.