• ベストアンサー

awkでファイルから読み込んだ値を、演算させるにはどうしたら良いですか

awkでファイルから読み込んだ値を、演算させるにはどうしたら良いですか。 ファイル(hoge.txt)の内容は、次の通り(全4行) 123 456 50 20 これを、bashスクリプトで計算させます。 FF=`cat hoge.txt | awk 'BEGIN {x=$2;printf ("%s, %s", (148+x*0.05), x);}'` echo "答え = ${FF}" このときの$2の値は、50です。但し、文字列として扱われているようです。 xの値を、数値として代入され、四則演算をさせるにはどうしたら良いですか? 以上、よろしくお願いします。

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

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは awk の扱い方に疑問があります。 >ファイル(hoge.txt)の内容は、次の通り(全4行) >123 >456 >50 >20  awk はレコードを改行で認識します。 4行ということですから4レコードなりフィールドは1つだけです。  ということは BEGIN{}により、$1 にデータ 123 だけは入る(BEGINなので1回だけ)が $2 はヌル(処理系によっては不定?)になるはずで「このときの$2の値は、50です。」の文脈が解せません(^^; 3番目のデータだけ計算したいのであれば、下記のように書くんじゃないかと思われます。 awk 'BEGIN{i=0}{i=i+1;if(i=3)print $1*0.05+148,$1;}'  あえて printf を使いませんでした。また、質問者さんの意図を完全に把握していません。見当違いだったらごめんなさい。

xcode_15
質問者

お礼

ありがとうございます。 $2が3行目だと思い込んでいました。 (^^; if(i=3)を、if(i==3)にしたら思い通りの動きになりました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

#1です。$1 等の値については、 echo `cat hoge.txt` | awk '・・・・ と勘違いして回答してました。echo `cat hoge.txt` すると、4行が1行に変わるので、てっきりそうだと思い込んでました。

xcode_15
質問者

お礼

ありがとうございます。 何とか解決できました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

BEGIN{ } に命令を書いているので、入力を読んでません。従って、$2 も空です。 cat hoge.txt | awk '{。。。。。}' だと、{ }の中で、$1="123", $2="456", $3="50", $4="20" になります。

関連するQ&A