ファイルのフィールドに数値を追加する

ファイルのフィールドに数値を追加する

次のデータを含むファイルがあります。

Archie McNichol:(206) 548-1348:250:100:175

最後の175に100を追加したいので、次のように印刷されます。

Archie McNichol:(206) 548-1348:250:100:275

これは実際に私が持っているものです:

#!/bin/bash
while IFS=: read -r -a LINE
do
    added=${LINE[3]} | 100
    echo "${LINE[0]}" $added+100

done < "$1"

答え1

Jason Urianは次のように語った。

$ awk -F: '{$NF += 100}1' file

または明らかな欠落(OFS)を修正して私のように書くなら、

$ awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }' file >file.new

または、

$ awk -v FS=':' -v OFS=':' '{ $NF += 100; print }' file >file.new

それから。fileという名前の新しいファイルを読み取り、生成しますfile.new

この短いawkスクリプトは、各行を -file:区切られたフィールドで構成されるものとして扱います。を使用すると、$NF各行の最後のフィールドにアクセスでき、$NF += 100その値が何であれ100を加算できます。

print変更された行が出力されます(1コメントは真の値であり、awk現在の行を印刷するデフォルトの動作を求めます)。

コマンドラインオプションは、-v FS=':' -v OFS=':'入力フィールドと出力フィールドの区切り文字をに設定します:

1行の入力でテストしてみてください。

$ echo 'Archie McNichol:(206) 548-1348:250:100:175' | awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }'
Archie McNichol:(206) 548-1348:250:100:275

関連情報