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기본값을 트리거 하기 위해 0이 아닌 부작용 값에 의존하므로 빈 줄은 건너뜁니다. print이것이 바람직하지 않은 경우 약간 더 장황한 를 사용할 수 있습니다 {NF+=0} 1.

관련 정보