![데이터 파일의 특정 열 범위 내의 공백 문자열을 0의 문자열로 변경합니다.](https://linux55.com/image/193057/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%20%EB%B2%94%EC%9C%84%20%EB%82%B4%EC%9D%98%20%EA%B3%B5%EB%B0%B1%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%200%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EB%8B%A4..png)
우리는 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######
#######################
#######################
#######################
#######################