質問: $i {print nr, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?
回答: シングルが使えないならダブルでくくるとか a=`cat sample.txt|awk "nr == $i {print nr, \\$2;}"` -vオプションでawkの変数に代入するとか a=`cat sample.txt|awk -v i=$i 'nr == i {print nr, $2;}'` ですけど、そもそも、1行ずつ取り出すのに catで全部出力→awkで全部入力→1行だけ出力 って効率悪すぎませんか? 同じwhileを使うにしても cat sample.txt | while read line do a=`echo ${line} |awk '{print $2;}'` b=`echo ${line} |awk '{print $3;}'` ... と1行ずつ処理するとか、bashだったら cat sample.txt | while read line do declare -a a=($line) a=${a[0]} b=${a[1]} と配列を使うとか 行番号が欲しかったら cat -n sample.txtにして $1に行番号を入れるか、i=`expr $i + 1` で行番号を数えるとか あるいは awk '{ nrと$2と$3を使った処理 }' sample.txt とawkだけで済ましてしまう、とか