
Tengo la siguiente secuencia en un archivo:
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)
Quiero dividirlo en partes pequeñas: los dos primeros caracteres siempre existirán, el resto son opcionales. i,j,k,l son números que pueden variar del 1 al 191. N es el carácter "N". Quiero tener el siguiente 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
¿Se puede hacer esto con AWK patsplit?
Respuesta1
A través de sed
:
sed 's/^../& /;s/[-()]/ /g' datafile.dat
Respuesta2
Con 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
Tenga en cuenta que se omitirán líneas vacías, ya que se basa en un valor de efecto secundario distinto de cero NF+=0
para activar el valor predeterminado print
; si eso no es deseable, puede utilizar el formato un poco más detallado {NF+=0} 1
.