수학 연산을 사용하여 문자열을 바꾸는 방법

수학 연산을 사용하여 문자열을 바꾸는 방법

gcode 파일이 있는데 Z의 모든 값에서 101.54를 빼야 합니다. 형식은[Z]:[0-9]*.[0-9]*

sed이 작업을 수행하려면 다른 Linux 도구를 어떻게 사용합니까 ?

좋아요: Z:101.6결국 로 변경됩니다 Z:0.06.

미리 감사드립니다

답변1

$ echo "Z:101.6" | perl -p -e 's/Z:(\d+(?:\.\d+)?)/sprintf("Z:%.2f",$1-101.54)/eg'
Z:0.06

이는 Perl의 /e정규식 수정자를 사용하여 연산자 오른쪽의 표현식을 평가합니다 s///. 나중에 정수와 부동 소수점을 처리 Z:하고 대체합니다.모두입력 줄의 어느 곳에서나 찾은 패턴과 일치합니다.

답변2

이것은 작업입니다 awk.

awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
  • BEGIN{FS=OFS=":"}입력 및 출력 필드 구분 기호를 콜론으로 설정합니다.
  • {$2-=101.54;print}각 행에 대해 두 번째 필드에서 101.54를 빼고 인쇄합니다.
  • 필요한 경우 또는 를 사용하여 줄을 제한할 수 있지만 명령을 전역으로 $1=="Z"{...}만들어야 합니다 (그렇지 않으면 모든 줄을 생략하게 됩니다).print아니요참조 Z), 예를 들어
    $1=="Z"{$2-=101.54} 1
    
    또는
    $1=="Z"{$2-=101.54} {print}
    

예:

$ echo 'Z:101.6' | awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
Z:0.06

관련 정보