次のテキストがあります。
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番目の文字である行の末尾にソートする必要があります。 「;」で始まる行は、2番目の「;」が表示されるまで変更されずに維持され、2番目の「;」から行の終わりまでの視線は文字41に揃えなければなりません。 2番目の「;」は、文字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