- ベストアンサー
awkで行ごとの計算について
- HP-UX,UNIX環境でawkを使用して、行ごとの計算を行いたいです。具体的には、2行目の1カラム目から1行目の1カラム目を引き算し、計算結果をファイルにリダイレクトしたいです。同様に、4行目の1カラム目から3行目の1カラム目を引き算して、計算結果をファイルにリダイレクトしたいです。ただし、awkの使い方がわからないため、具体的な方法について教えていただきたいです。
- HP-UX,UNIX環境でawkを使用して、行ごとの計算を行いたいです。具体的には、2行目の1カラム目から1行目の1カラム目を引き算し、計算結果をファイルにリダイレクトしたいです。また、4行目の1カラム目から3行目の1カラム目を引き算して、計算結果をファイルにリダイレクトしたいです。このような計算処理を行う方法について、awkを使って実現する手順を教えていただきたいです。
- HP-UX,UNIX環境でawkを使用して、行ごとの計算を行いたいです。具体的には、2行目の1カラム目から1行目の1カラム目を引き算し、計算結果をファイルにリダイレクトしたいです。同様に、4行目の1カラム目から3行目の1カラム目を引き算して、計算結果をファイルにリダイレクトしたいです。awkを使用してこの処理を行う方法について、具体的な手順をお教えいただけますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
なんで「CGI」のところでシェルスクリプトやawkの質問をするのでしょうか。 { num = $1; if (getline > 0) print $1 - num;, $0 } 余計な行はないと仮定しています。
お礼
回答ありがとうございます。 shとかのカテゴリがなかったので、ここにしてしまいましたが、 その他(プログラミング)とかありましたね。
- saijyo_739
- ベストアンサー率53% (119/222)
> shでのループ処理は以下のようにしたいです。 2n行目から2n-1行目を減じるという処理でしょうか。 awk使わなくてもシェルスクリプトでもできる処理ではありますが。 $ DATA='20110322000000 00:00:00 PERFORMANCE all' $ set -- $DATA $ echo $1 20110322000000 既に指摘されている通り、20110322000000は整数を32ビットとして扱った時に扱える範囲を越えてますので(64ビットで扱うなら問題起こらない)分割して処理する等対処する必要があるかも知れません。
補足
saijyo_739さん 回答ありがとうございます。 確かに計算のビット数は意識してませんでした。 10桁どうしの引き算になりそうです。 echoで10桁どうしの簡単な引き算をしてみましたが、 ちゃんと表示できるみたいですね
- kmee
- ベストアンサー率55% (1857/3366)
awkなら、現在の行は組込み変数NRで参照できる。 奇数行目(NR % 2 == 1) : 1カラム目($1)を適当な変数に退避 奇数行目(NR % 2 == 0) : 1カラム目から、奇数行目で退避した値を引いて出力 よって awk '{ if ( NR %2 == 1) { t = $1 } else { print $1 - t }' < 入力 > 出力 ...なんですが、例にある14桁の数字だと、処理系によっては計算精度をオーバーして正常に計算できません。そのような場合は、筆算の要領で分割して計算するか、多倍長や無限桁整数に対応している言語(Ruby,Python等)で同様のプログラムを作るのがいいでしょう。
補足
kmeeさん 回答ありがとうございます。 print $1 - t した結果を偶数行の先頭に付与する事も可能ですか??
補足
osamuyさん ありがとうございます。 print $1 -sした結果を偶数行の先頭に付与することも可能ですか??