데이터 파일의 특정 열 범위 내의 공백 문자열을 0의 문자열로 변경합니다.

데이터 파일의 특정 열 범위 내의 공백 문자열을 0의 문자열로 변경합니다.

우리는 Redhat Linux 7.9 및 bsh.

데이터 파일을 살펴보고 모든 필드를 열 10과 열 20 사이의 공백을 0으로 바꾸고 싶습니다.

따라서 샘플 파일이 있는 경우:

#######################

#######################

#######################

#########        ######

#######################

#######################

#######################

#######################

나는 스크립트가 다음과 같기를 원합니다:

#######################

#######################

#######################

#########000000000#####

#######################

#######################

#######################

#######################

나는 다음을 사용해 보았습니다.

awk '{val=substr($0,10,9);gsub(val,"     ","000000000")}1' scr1

하지만 원본 파일만 반환됩니다. 내가 놓친 게 무엇입니까?

답변1

Perl은 표시된 것처럼 이를 간단하게 처리할 수 있습니다.

Perl 인덱스는 0에서 시작하므로 열 10은 9이고 col10...20에는 20-10+1=11 요소가 있습니다.

$ perl -lpe 'substr($_, 9, 11) =~ tr/ /0/' file

산출:-

#######################

#######################

#######################
12345678901234567890
#########00000000000###
         12345678901
#######################

#######################

답변2

매개변수 의 gsub()순서와 의미가 잘못되었습니다. 매뉴얼 페이지를 참조하세요.

모든 Unix 시스템의 모든 쉘에서 awk를 사용하여 다음과 같은 작업을 수행하려는 것처럼 보입니다.

$ awk '{val=substr($0,10,9)} gsub(/ /,0,val){$0=substr($0,1,9) val substr($0,19)} 1' file
#######################

#######################

#######################

#########00000000######

#######################

#######################

#######################

#######################

관련 정보