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 之間的數字。我想要得到以下結果:

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.

相關內容