1行のテキストのみを含むテキストファイルがあります。
1314:Battery:1.90:50:30
aをして50と30の値を以下のような値に変更するgrep
方法がないか悩んでいます。sed
1314:Battery:1.90:45:35
50から5を減らし、30から5を増やします。
この問題を解決するより良い方法があるかどうかを教えてください。私は今このスクリプトを学び始めました。ありがとう=)
答え1
awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename
出力:
1314: バッテリー: 1.90:45:35
答え2
そしてperl
:
perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file
sh
(この数は常に前にゼロのない10進整数であると仮定します):
IFS=: read -r a b c d e < the-file &&
printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file
最新バージョンのGNUを使用してくださいawk
。
gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file
使用しないでください-i inplace
現在の作業ディレクトリから最初に拡張機能をgawk
ロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'