次のデータを含むファイルがあります。
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