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.

관련 정보