다음과 같은 텍스트가 있습니다.
LDX LEVEL
LDA INITD015,X ; INITIAL ACTIVE SPRITES
STA $D015
STA SAVED015
LDA INITXPOS,X ; INITIAL HERO X COORDINATE
STA XPOS
LDA INITYPOS,X ; INITIAL HERO Y COORDINATE
STA YPOS
LDA INITXPOSMUM,X ; INITIAL MUMMY X COORDINATE
STA XPOSMUM
LDA LEVEL
BNE NOTLOADENDELEMENTS
LDA FLAGLOSELIFE
BNE NOTLOADENDELEMENTS
; LDX #<BIGELEMENTSFILE ; LOW BYTE
; LDY #>BIGELEMENTSFILE ; HI BYTE
; JSR LOADFILE_EXOMIZER
줄의 첫 번째 문자가 아닌 ";"으로 시작하는 텍스트를 줄의 41번째 문자인 줄 끝으로 정렬해야 합니다. ";"로 시작하는 줄은 두 번째 ";"가 나타날 때까지 변경되지 않고 유지되어야 하며, 두 번째 ";"부터 줄 끝까지의 시선은 문자 41에 정렬되어야 합니다. 두 번째 ";"는 문자 41 앞이나 뒤에 있을 수 있습니다.
SED 또는 AWK를 사용하여 이것이 가능합니까?
답변1
펄은 어떻습니까?
perl -pe 's/^(.+?)(?=;)/$1 . " "x(41-length($1))/e' file
LDX LEVEL
LDA INITD015,X ; INITIAL ACTIVE SPRITES
STA $D015
STA SAVED015
LDA INITXPOS,X ; INITIAL HERO X COORDINATE
STA XPOS
LDA INITYPOS,X ; INITIAL HERO Y COORDINATE
STA YPOS
LDA INITXPOSMUM,X ; INITIAL MUMMY X COORDINATE
STA XPOSMUM
LDA LEVEL
BNE NOTLOADENDELEMENTS
LDA FLAGLOSELIFE
BNE NOTLOADENDELEMENTS
; LDX #<BIGELEMENTSFILE ; LOW BYTE
; LDY #>BIGELEMENTSFILE ; HI BYTE
; JSR LOADFILE_EXOMIZER
앗
awk '
(p=index(substr($0,2), ";")) > 0 {
printf "%-40s%s\n", substr($0,1,p), substr($0,p)
next
}
{print}
' file