- ベストアンサー
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の値を、数値として代入され、四則演算をさせるにはどうしたら良いですか? 以上、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 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 を使いませんでした。また、質問者さんの意図を完全に把握していません。見当違いだったらごめんなさい。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
#1です。$1 等の値については、 echo `cat hoge.txt` | awk '・・・・ と勘違いして回答してました。echo `cat hoge.txt` すると、4行が1行に変わるので、てっきりそうだと思い込んでました。
お礼
ありがとうございます。 何とか解決できました。
- notnot
- ベストアンサー率47% (4900/10358)
BEGIN{ } に命令を書いているので、入力を読んでません。従って、$2 も空です。 cat hoge.txt | awk '{。。。。。}' だと、{ }の中で、$1="123", $2="456", $3="50", $4="20" になります。
お礼
ありがとうございます。 $2が3行目だと思い込んでいました。 (^^; if(i=3)を、if(i==3)にしたら思い通りの動きになりました。