![Bash에서 0이 포함된 행을 반복합니다.](https://linux55.com/image/34218/Bash%EC%97%90%EC%84%9C%200%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%ED%96%89%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같은 파일이 있습니다.
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