AWK 分割变量

AWK 分割变量

我在文件中有以下序列:

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.

相关内容