一回も披露したことのない豆知識

下記のような内容で、list変数の値から抽出してtest{i}変数に入れるようにしています。
※awkコマンドでのprintの値を for の値にしています。

for i in 0 1 2
do
test${i}=`echo ${list} | awk '{ print $'${i}' }'`
done

この例はうまくいくのですが、
print $'${i}'の部分で${i}の値にプラス2したものを利用したく、
test${i}=`echo ${list} | awk '{ print $'${i+2}' }'`

test${i}=`echo ${list} | awk '{ print $i=`expr ${i} + 2` }'`
等を試しましたがうまくいきません。

どのようにすればよいでしょうか。

よろしくお願い致します。

A 回答 (2件)

記載されたうまくいくという例の方ですが、実際にはevalをかけたりしているという認識でよいでしょうか?



また全体を通してですが、「awkでアクセスするtsvなりのカラム番号を、シェル側でハンドリングしたい」
という意図でいいんでしょうか

元のコードに沿って、exprを使う形式だととりあえずこんな感じで動きました。
http://ideone.com/K3rIi

今なら$(())使ったほうが少しはすっきりするかもしれませんけど
http://ideone.com/bwTrf

一応、どちらもbashとdashで動きました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すみません、初心者なもので、ご質問いただいた意味を理解できませんでしたが、無事できました。

evalを知りませんでした。
これを使ってやりたいことできました。便利ですね。

ありがとうございました。

お礼日時:2012/02/27 20:58

awk自体がプログラミング言語ですから


http://homepage2.nifty.com/mozu/koza/awk_koza/aw …
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

すみません、どうすればよいのでしょうか。
サイトみてもよくわかりません。

お礼日時:2012/02/26 19:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!