• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:awkで行ごとの計算について)

awkで行ごとの計算について

このQ&Aのポイント
  • 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を使用してこの処理を行う方法について、具体的な手順をお教えいただけますか?

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

awk使ってよいなら、こうかな: NR % 2 == 1 { s = $1 } NR % 2 == 0 { print $1 - s }

chabakof
質問者

補足

osamuyさん ありがとうございます。 print $1 -sした結果を偶数行の先頭に付与することも可能ですか??

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

なんで「CGI」のところでシェルスクリプトやawkの質問をするのでしょうか。 { num = $1; if (getline > 0) print $1 - num;, $0 } 余計な行はないと仮定しています。

chabakof
質問者

お礼

回答ありがとうございます。 shとかのカテゴリがなかったので、ここにしてしまいましたが、 その他(プログラミング)とかありましたね。

回答No.3

> shでのループ処理は以下のようにしたいです。 2n行目から2n-1行目を減じるという処理でしょうか。 awk使わなくてもシェルスクリプトでもできる処理ではありますが。 $ DATA='20110322000000 00:00:00 PERFORMANCE all' $ set -- $DATA $ echo $1 20110322000000 既に指摘されている通り、20110322000000は整数を32ビットとして扱った時に扱える範囲を越えてますので(64ビットで扱うなら問題起こらない)分割して処理する等対処する必要があるかも知れません。

chabakof
質問者

補足

saijyo_739さん 回答ありがとうございます。 確かに計算のビット数は意識してませんでした。 10桁どうしの引き算になりそうです。 echoで10桁どうしの簡単な引き算をしてみましたが、 ちゃんと表示できるみたいですね

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

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等)で同様のプログラムを作るのがいいでしょう。

chabakof
質問者

補足

kmeeさん 回答ありがとうございます。 print $1 - t した結果を偶数行の先頭に付与する事も可能ですか??