我在文件中有以下序列:
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)
我想将其分成小块:前两个字符将始终存在,其余的字符是可选的。 i,j,k,l 是 1 到 191 之间的数字。N 是字符“N”。我想要得到以下结果:
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
这可以用 AWK patsplit 来完成吗?
答案1
通过sed
:
sed 's/^../& /;s/[-()]/ /g' datafile.dat
答案2
使用 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
请注意,将跳过空行,因为它依赖于非零副作用值来NF+=0
触发默认值print
;如果这是不可取的,您可以使用稍微更详细的{NF+=0} 1
.