
1行だけのテキストファイルがあります
1314:Battery:1.90:50:30
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"]}'