-PR-
解決済み

シェルスクリプトでファイル内の数値文字列を数値として扱うには

  • すぐに回答を!
  • 質問No.5371727
  • 閲覧数7049
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 17% (49/277)

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル11

ベストアンサー率 32% (86/262)

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

その他の回答 (全3件)

  • 回答No.1

expr コマンドを使えばよいのでは?

例) res=`expr $str + 1`
お礼コメント
wishw124

お礼率 17% (49/277)

ありがとうございます。

exprもやってみたのですが、処理が遅くなるので使いません。
他の方法ないですか?
投稿日時 - 2009-10-16 15:36:33


  • 回答No.2

> exprもやってみたのですが、処理が遅くなるので使いません。
> 他の方法ないですか?

expr では処理が遅くなるとのことですが、いったいどのような重い処理をされているのでしょう?

シェルに算術演算の機能はありませんので、シェルスクリプトで算術演算を行う場合はどうしても外部コマンドを呼び出すしか方法がありません。

また、処理速度が問題になるのでしたら、より高速な処理が可能な言語(例えば Perlなど)で書き換えた方が簡単に実現可能かもしれません。

あるいは、処理方法(アルゴリズム)自体を見直すとか。
  • 回答No.3
レベル14

ベストアンサー率 23% (3656/15480)

どういう内容のファイルからどのように読み取っているのでしょうか?
例えば, その前に
echo \"$str\"
を実行したらどのような表示が得られますか?
このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

-PR-
ページ先頭へ