문자 위치를 기준으로 일치 및 추가

문자 위치를 기준으로 일치 및 추가

파일의 고정 위치에 있는 숫자/문자를 기반으로 일치하고 업데이트해야 하는 파일이 있습니다.

586 위치의 문자 = 5인 경우 공백 614에 0 "0"을 삽입합니다. 586 위치의 문자 = 1인 경우 공백 615에 0 "0"을 삽입합니다.

sed를 사용하여 누락된 다른 문자를 추가하고 다양한 위치에서 공백을 제거/추가했지만 이러한 문제는 파일 전체에서 수정되었습니다.

답변1

awk에 대한 옵션일 수 있음(테스트되지 않음):

$ awk 'BEGIN{FS=OFS=""}$586==5{$614="0" $614}$586==1{$615="0" $615}1' inputfile >newfile
$ mv newfile inputfile

FS=""로 설정하면 awk 구분 기호는 문자입니다.

답변2

모든 입력 줄에서 이 작업을 수행하려고 하고 오프셋이 1에서 시작하고 바이트 대신 문자 수로 표현된다고 가정하면 POSIXly:

sed '
  s/^.\{585\}5.\{27\}/&0/;t
  s/^.\{585\}1.\{28\}/&0/'

또는:

awk 'length >= 613 && substr($0, 586, 1) == "5" {
       $0 = substr($0, 1, 613) "0" substr($0, 614)
       next
     }
     length >= 614 && substr($0, 586, 1) == "1" {
       $0 = substr($0, 1, 614) "0" substr($0, 615)
     }
     {print}'

답변3

perl -i -pe '
   m/^.{585}\K5/ && s/.{613}\K/0/;
   m/^.{585}\K1/ && s/.{614}\K/0/;
' inoutfile

관련 정보