Bash에서 0이 포함된 행을 반복합니다.

Bash에서 0이 포함된 행을 반복합니다.

다음과 같은 파일이 있습니다.

141.519
141.009
140.121
135.519
0
0
0
0

저는 쉘 스크립트를 작성 중이며 0이 포함된 모든 줄을 -1e+10으로 바꾸고 싶습니다.

지금까지 나는 다음을 시도했습니다.

while read a 
do
    if [ "$a" == "0" ]; then
        echo ${a//0/-1e+10}
        #let a="-1e+10"
    fi      
done < $name.pitch.f0.ascii  > $name.pitch.f0.ascii.replaced  ; 

그러나 결과적으로 모든 행이 -1e+10으로 대체됩니다. 내가 뭘 잘못했나요?

답변1

코드가 누락되었습니다 else echo "$a". 그러나 루프를 사용할 필요는 없습니다. sed파일을 한 줄씩 처리하려면 다음을 사용하십시오.

sed -i~ -e 's/^0$/-1e+10/' $name.putch.f0.ascii

-i~확장자를 사용하여 백업을 만듭니다 ~.

s///"대체하다"라는 뜻입니다. ^줄의 시작과 일치하고 $줄의 끝과 일치합니다.

답변2

awk를 사용하세요:

awk '{if($0==0){print "-1e+10"}else{print $0}}' file

산출:

141.519
141.009
140.121
135.519
-1e+10
-1e+10
-1e+10
-1e+10

위 코드에서 줄에 내용만 포함되어 있으면 0-1e+10으로 대체되고, 그렇지 않으면 해당 줄은 원래 줄로 인쇄됩니다.

간단히 말해서: Muru가 제안합니다.

awk '$0 == 0 {$0 = "-1e+10"}1' file

관련 정보