風の水平成分と鉛直成分の値が入ったファイル、horizon.txtとvertical.txtがあり、これらの値を用いて風向を求めたいのですが、上手く出来ません。
以下のように組んでみたのですが、何が間違っているか教えていただけないでしょうか。
paste horizon.txt vertical.txt | awk '{if($1>0){print(90-atan($2/$1)*180/M_PI())+180}else if($1<0)print{(90-atan($2/$1)*180/M_PI())}else 0}'
ちなみにexcelでは、
=IF($1>0,(90-ATAN($2/$1)*180/PI())+180,IF($1<0,(90-ATAN($2/$1)*180/PI()),0))
で計算出来ました。
No.1ベストアンサー
- 回答日時:
実行したとき、エラーメッセージは出てないですか?
Linuxということで、awkはGNU awkだと思いますが、手許のGNU Awk 4.0.2では
gawk: コマンドライン:1: {if($1>0){print(90-atan($2/$1)*180/M_PI())+180}else if($1<0)print{(90-atan($2/$1)*180/M_PI())}else 0}
gawk: コマンドライン:1: ^ syntax error
gawk: コマンドライン:1: {if($1>0){print(90-atan($2/$1)*180/M_PI())+180}else if($1<0)print{(90-atan($2/$1)*180/M_PI())}else 0}
gawk: コマンドライン:1: ^ syntax error
gawk: コマンドライン:1: {if($1>0){print(90-atan($2/$1)*180/M_PI())+180}else if($1<0)print{(90-atan($2/$1)*180/M_PI())}else 0}
gawk: コマンドライン:1: ^ syntax error
と、間違いの箇所を指摘してくれます。(ここのシステムの関係上、スペースがまとめられてしまいますが、実際は^sytan errorの位置が、間違い箇所の下にあります)
現在のものは、単純な{}の間違いがあります。
これを修正すると、次に
gawk: コマンドライン:1: (FILENAME=- FNR=1) 致命的: 関数 `atan' は定義されていません
とエラーが出ます。
マニュアルを読むと、たしかに「atan」という関数は定義されていません。ついでに、「M_PI」という関数もありません。
http://www.gnu.org/software/gawk/manual/html_nod …
tanの逆関数は、 atan2を使います。
atan(y/x) = atan2(y,x) です。
また、同じところに、πとして atan2(-1,0) を使う、というのがあります。
atan2はatanに比べて優れている点があります。
atanでは、x<0,y<0 と x>0,y>0 の区別ができないうえ、x=0の時は計算不能でした。そのためにxの正負によって+180しているはずです。
# ちなみに、$1=0のとき、実際は$2>0なら90,$2<0なら-90が答えになるはずです。
# どちらも 0になっているのは間違いです。
atan2では、x<0,y<0 と x>0,y>0 を区別し、それぞれの象限にあった角度を返します。x=0のときもyに対応してちゃんと±π/2を返します。よって、$1によって条件分けする必要がなく
{print (90-atan2($2,$1)*180/atan2(0,-1) +180) }
これだけで済みます。
なお、atant2(0,0)=0になります。実際は、無風で、角度も無いはずですが、上記では 90度という答えになります。
これをこのままにするか、場合分けして強制的に特別な値にするかは、目的に合せてください。
ちなみに。Excelにもatan2があります。これを使うと同様にif関数を使わずに記述できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- 数学 三角関数の和 4 2023/06/17 18:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
bashでシングルクォート内の変...
-
ubuntu(linux)のシャットダウン...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
自作のウェブサイトを友人に見...
-
AWSでSSH接続をしたいのですが...
-
ubuntuのシャットダウンが進ま...
-
ubuntuで デイスク/deb/loopと...
-
Ubuntu系とCentOS系の違いはな...
-
lubuntuのインストールが終わり...
-
Windowsのローカルディレクトリ...
-
linuxサーバーのキャッシュをク...
-
Linuxのパーティション番号の変...
-
Ubuntu でinvalid filenameとな...
-
LinuxのOSのインストールについて
-
年末ですが大至急お願い申し上...
-
Apach Solr-8.4.1のチューニン...
-
tarで纏める際に、複数場外した...
-
Postfixでドコモメールに送信す...
-
ssl_error_logのエラー内容(AH...
-
ssl_request_logの必要性について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuのシャットダウンが進ま...
-
Windowsのパソコンを使って仮想...
-
ubuntuで デイスク/deb/loopと...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu on Xorgのログインについて
-
LinuxのノートパソコンでDVDコ...
-
linuxサーバーのキャッシュをク...
-
Postfixでドコモメールに送信す...
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Linux Mint 日本語入力できなく...
-
ホストオンリーアダプタで接続...
-
ubuntuのサーバー(virtual box)...
-
VirtualBox ゲストOSにPC内蔵HD...
-
shellscript内のコマンドを、su...
-
Linux Ubuntu22.4の起動時エラ...
-
Ubuntu でinvalid filenameとな...
おすすめ情報