数学演算を使用して文字列を置き換える方法

数学演算を使用して文字列を置き換える方法

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}各行について、2番目のフィールドから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

関連情報