- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:今、awkを使ったシェルスクリプトを作っています。)
awkを使ったシェルスクリプトで列を取り出す方法
このQ&Aのポイント
- awkを使ったシェルスクリプトを作成中ですが、変数展開ができない問題に困っています。
- 指定したファイルから特定の列を取り出すために、whileループを使用し、awkコマンドを実行しています。
- しかし、awkコマンド内の変数展開がうまくいかず困っています。解決策があれば教えてください。
- みんなの回答 (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だけで済ましてしまう、とか
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
「シングルクォートでくくると展開されないので困る」なら, 「シングルクォートでくくらない」というのが最もシンプルな対処法ではないかな.
お礼
教えていただいた、下記の方法で作成しました。ずいぶんと見やすくなったと思います。 cat sample.txt | while read line do A=`echo ${line} |awk '{print $2;}'` B=`echo ${line} |awk '{print $3;}'` 素人の質問に、ご丁寧に回答を下さってありがとうございました。 精進します。今後ともよろしくお願いします。