タグ付けされた質問 「arithmetic」

このタグは、数学演算に関連するすべてのものを対象としています。したがって、 `awk`での計算について質問したい場合、または` bc`について質問したい場合は、これが適切なタグです。

1
シェル算術評価で非サニタイズデータを使用することのセキュリティへの影響
最近の質問へのコメントで、StéphaneChazelasは、二重カッコ算術には次のようなセキュリティの影響があると述べています。 x=$((1-$x)) ほとんどのシェルで。 私のGoogleスキルは錆びているようで、何も見つかりません。二重括弧演算のセキュリティ上の意味は何ですか?


4
ビット単位シフトとBashの最大整数
これは探索の質問です。つまり、この質問が何であるかは完全にはわかりませんが、Bashの最大の整数に関するものだと思います。とにかく、表向きに定義します。 $ echo $((1<<8)) 256 ビットをシフトして整数を生成しています。どこまで行けますか? $ echo $((1<<80000)) 1 これまでのところ、どうやら。(1は予想外であり、私はそれに戻ります。)しかし、 $ echo $((1<<1022)) 4611686018427387904 まだポジティブです。ただし、これではありません: $ echo $((1<<1023)) -9223372036854775808 そしてさらに一歩先へ、 $ echo $((1<<1024)) 1 なぜ1ですか?そして、なぜ次の? $ echo $((1<<1025)) 2 $ echo $((1<<1026)) 4 誰かがこのシリーズを分析したいですか? 更新 私のマシン: $ uname -a Linux tomas-Latitude-E4200 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC …
16 bash  arithmetic 

2
バッシュでローカル変数をインクリメントする方法は?
データ 1 \begin{document} 3 コード #!/bin/bash function getStart { local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)" echo $START } START2=$(getStart) echo $START2 戻ります2が欲しいです3。私はbashスクリプトに数値を追加するにはどうすればよいかについてのこの答えによって失敗に終わりました: START2=$((getStart+1)) Bashスクリプトでローカル変数をインクリメントするにはどうすればよいですか?

2
シェルで浮動小数点数を丸める方法は?
コマンドラインでIEEE 754浮動小数点数を正しく丸めるにはどうすればよいですか? 出力数値の精度-小数桁数を指定したいのですが。 丸め6.66精度にして1与える必要があり6.7、たとえば、。以下の表の詳細: Value Precision Rounded 6.66 0 7 6.66 1 6.7 6.66 2 6.66 6.66 3 6.660 6.666 3 6.666 6.6666 3 6.667 対話型シェルで使用できる必要がありますが、本番シェルスクリプトで使用するには十分に堅牢であることが理想的です。

6
「$((〜33))」が-34を生成するのはなぜですか?
$ echo $(( 255 )) 255 $ echo $(( 33 )) 33 $ echo $(( ~33 )) -34 $ echo $(( ~255 )) -256 $ 私のカーネルは: $ uname -a Linux HOSTNAME 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux 質問: ~数字を無視するためです。しかし、なぜない~33生産-34となぜ~255農産物は-256?
12 bash  shell  arithmetic 

8
bashを使用して時間を合計する方法は?
一連のプロセスがコンピューターで実行する必要がある合計時間を知りたいのですが、そこで実行するか、より強力なコンピューターで実行するかを決定します。それで、各コマンドの実行時間を予測しています。出力は次のようになります。 process1 00:03:34 process2 00:00:35 process3 00:12:34 2番目の列を合計して合計実行時間を取得するにはどうすればよいですか?各行をピップしてみることができます awk '{sum += $2 } END { print sum } しかし、値は自然数ではないため、これは意味がありません。
12 bash  time  arithmetic 

2
awk高精度演算
私はawkに高精度の算術演算を代入演算で行うように指示する方法を探しています。これには、ファイルからフィールドを読み取り、その値を1%の増分で置き換えることが含まれます。しかし、私はそこで精度を失っています。これは問題の簡単な再現です: $ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {print}' 0.546748 ここでは、小数点以下16桁の精度がありますが、awkでは6桁しかありません。printfを使用しても、同じ結果が得られます。 $ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {printf("%.16G\n", $1)}' 0.546748 希望する精度を得る方法について何か提案はありますか?

4
変数を計算し、別の変数に出力します
私が知っている唯一の計算機はbcです。1変数に追加して、別の変数に出力したい。 nextnumファイル内の文字列をカウントして変数を取得しました。 nextnum=`grep -o stringtocount file.tpl.php | wc -w` nextnum値がであるとしましょう1。で追加1するとになり2ます。計算するには、次を実行します。 rownum=`$nextnum+1 | bc` エラーが発生しました: 1+1: command not found 計算に失敗しました。バックティックを変更しようとしましたが、まだ機能しません。変数を計算して別の変数に出力する方法がわかりません。

1
算術オーバーフローなどを警告しないbashシェルの根拠は何ですか?
bashシェルの算術評価機能には制限が設定されています。マニュアルはシェル演算のこの側面については簡潔ですが、次のように述べています: 評価はオーバーフローのチェックなしで固定幅整数で行われますが、0による除算はトラップされ、エラーとしてフラグが立てられます。演算子とその優先順位、結合性、および値は、C言語の場合と同じです。 これが参照する固定幅整数は、実際にはどのデータ型が使用されているか(そしてこれがこれを超えている理由の詳細)ですが、制限値は次のように表されます/usr/include/limits.h。 # if __WORDSIZE == 64 # define ULONG_MAX 18446744073709551615UL # ifdef __USE_ISOC99 # define LLONG_MAX 9223372036854775807LL # define ULLONG_MAX 18446744073709551615ULL そして、それを知ったら、次のようにこの事実の状態を確認できます。 # getconf -a | grep 'long' LONG_BIT 64 ULONG_MAX 18446744073709551615 これは64ビット整数であり、これは算術評価のコンテキストでシェルで直接変換されます。 # echo $(((2**63)-1)); echo $((2**63)); echo $(((2**63)+1)); echo $((2**64)) 9223372036854775807 //the practical usable limit for …

3
ケース+ケース構文で等しいかそれ以下またはそれ以上を実装する方法
私の目標は、数値の範囲を(case+ のみでesac)確認し、その範囲を印刷することです。だから例えば: 数値が0〜80の場合、印刷 >=0<=80 数値が81から100の間の場合、印刷 >=81<=100 等 以下の私のスクリプトの問題は、>=0<=900から9までの数値の場合のみ印刷されます。数値の範囲に従って正しい出力を印刷するようにスクリプトを修正する方法は? #!/bin/ksh read number case $number in [0-80]) echo ">=0<=80";; [81-100]) echo ">=81<=100";; [101-120]) echo ">=101<=120";; [121-300]) echo ">=121<=300";; esac

3
シェルスクリプトでの非常に大きな数の追加
二つの数が2つの異なるファイルに格納されていると仮定し、a.txtとb.txt。 各数値は、が使用する数値データタイプでサポートされないほど十分に大きい(30桁を超える)bash。 それらをシェルに追加するにはどうすればよいですか?


2
Perl名前変更ツール(Debian)で算術を実行しようとしています
5つのmp3ファイルがあるとします。 01-trackfoo.mp3 02-trackbar.mp3 03-trackbaz.mp3 04-trackabc.mp3 05-trackxyz.mp3 これで、ファイルをすばやく聴くことができ(コンソールのmplayerでうまくいきます)、トラックの順序が間違っていることがわかりました。05は実際には02で、残りは名前を変更する必要があります。したがって、最初に一時的な名前変更を行います。 01-trackfoo.mp3 02-trackbar.mp3 03-trackbaz.mp3 04-trackabc.mp3 00-trackxyz.mp3 ここで、「シフト」が必要です。02は03に、03は04に、04は05にすべきです。混乱を最小限に抑えるために、ex-05(現在は00)はmv後で編集されます。 私のアプローチはこれでした:(perl rename、Larry Wall、デフォルトはここDebian) rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' * 同様に(後で、さらにRTFMを実行した後) rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' * 特に/e[val]修飾子が評価以外のものを受け入れず、評価と文字列を組み合わせようとするとエラーがスローされるため、それらはどれも機能しませんでした。bash例えば、うまくそれを行うことができます foo$((1+6))に評価されますfoo7。 では、これをどのように行うことができますか(これだけのためにスタンドアロンスクリプト全体を作成するつもりはなく、1行が望ましい)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.