• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:今、awkを使ったシェルスクリプトを作っています。)

awkを使ったシェルスクリプトで列を取り出す方法

このQ&Aのポイント
  • awkを使ったシェルスクリプトを作成中ですが、変数展開ができない問題に困っています。
  • 指定したファイルから特定の列を取り出すために、whileループを使用し、awkコマンドを実行しています。
  • しかし、awkコマンド内の変数展開がうまくいかず困っています。解決策があれば教えてください。

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

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

シングルが使えないならダブルでくくるとか 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だけで済ましてしまう、とか

sirius2003
質問者

お礼

教えていただいた、下記の方法で作成しました。ずいぶんと見やすくなったと思います。 cat sample.txt | while read line do A=`echo ${line} |awk '{print $2;}'` B=`echo ${line} |awk '{print $3;}'` 素人の質問に、ご丁寧に回答を下さってありがとうございました。 精進します。今後ともよろしくお願いします。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「シングルクォートでくくると展開されないので困る」なら, 「シングルクォートでくくらない」というのが最もシンプルな対処法ではないかな.

関連するQ&A