AWK-Split-Variable

AWK-Split-Variable

Ich habe folgende Sequenz in einer Datei:

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)

Ich möchte es in kleine Teile aufteilen: Die ersten beiden Zeichen bleiben immer erhalten, der Rest ist optional. i,j,k,l sind Zahlen, die zwischen 1 und 191 variieren können. N ist das Zeichen „N“. Ich möchte folgendes Ergebnis haben:

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

Kann dies mit AWK Patsplit durchgeführt werden?

Antwort1

Über sed:

sed 's/^../& /;s/[-()]/ /g' datafile.dat

Antwort2

Mit 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+=0Beachten Sie, dass leere Zeilen übersprungen werden, da zum Auslösen des Standardwerts ein Nebeneffektwert ungleich Null erforderlich ist print. Wenn dies unerwünscht ist, können Sie das etwas ausführlichere verwenden {NF+=0} 1.

verwandte Informationen