ファイルの作成に使用した手順に従ってファイル名を指定したいと思います。ステップサイズは10進数で表され、私が知っている限り、bashで10進数を処理することは困難です。コードは次のとおりです。
for i in $(seq 0.05 0.05 0.45)
do
.
.
.
mv POSCAR slipped_112_111_$(( i*2 )).vasp
done
私が受け取るエラーは次のとおりです。
./slip_loop.sh: line 3: 0.05: syntax error: invalid arithmetic operator (error token is ".05")
期待されるファイル名:
slipped_112_111_0.10.vasp
slipped_112_111_0.20.vasp
slipped_112_111_0.30.vasp
.
.
.
解決策があれば教えてください。ありがとうございます。
ベストアンサー1
シェルはbash
浮動小数点演算を実行しません。
これは、浮動小数点値が目的の方法で使用できないことを意味します。代わりに、次のものを使用できます。
for number in {1..9}; do
# other code here
printf -v name 'slipped_112_111_0.%d0.vasp' "$number"
mv POSCAR "$name"
done
このprintf -v
ステートメントは変数に直接印刷されますname
。書式文字列は、新しいファイル名の正しい位置に表示されるように数値を書式設定します。
これにより、次のmv
コマンドが実行されます。
mv POSCAR slipped_112_111_0.10.vasp
mv POSCAR slipped_112_111_0.20.vasp
mv POSCAR slipped_112_111_0.30.vasp
mv POSCAR slipped_112_111_0.40.vasp
mv POSCAR slipped_112_111_0.50.vasp
mv POSCAR slipped_112_111_0.60.vasp
mv POSCAR slipped_112_111_0.70.vasp
mv POSCAR slipped_112_111_0.80.vasp
mv POSCAR slipped_112_111_0.90.vasp
他の目的で浮動小数点数が必要な場合:
for number in {1..9}; do
# other code here
value=$( bc <<<"scale=2; $number/20" )
printf -v name 'slipped_112_111_0.%d0.vasp' "$number"
mv POSCAR "$name"
done