- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:awkについて)
awkについての変更方法とエラーの原因
このQ&Aのポイント
- awkコマンドで変数をコマンドラインから渡す方法について調べています。ウェブで調べたところARGVを使用することが分かりましたが、実行時に引数を与えるとファイル名として認識されるエラーが発生しています。
- awkコマンドを使用して8番目のフィールドが特定の条件に一致する場合に9番目のフィールドの合計と平均を計算するスクリプトを作成しています。ただし、条件に一致するデータが存在しない場合の処理も行っています。
- awkコマンドを使用して変更したいデータの条件をコマンドラインから指定できるようにしたいです。具体的には、○○○というデータではなく、コマンド実行時に引数として渡したいです。変更を試みたところ、エラーが発生してしまいます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>なぜ引数をファイル名だと認識してしまうのでしょうか。 そりゃ簡単。 大雑把に言って、awkは最後のオプション(そのオプションが引数をとるなら その引数)の後は すべて処理対象のファイルの名前と見なすからです。 #実は例外があるけど割愛。 じゃあどうすれば、というと awk -f sample.awk data.csv ○○○ この順番をひっくり返して awk -f sample.awk ○○○ data.csv にしたうえでスクリプトのBEGINブロックで target = ARGV[1] ARGV[1] = "" というのを付け加えて、 ルールを { #フィールドの8番目の条件が一致する場合のみ9番目を合計 if($8=="○○○"){ if ($8 == target) { に変更してください。 ちなみに、ARGV[0]ってのはawkインタプリタの名前が入ってるもので 引数じゃありません(引数は1から)。 あるいは、 awk -f sample.awk -vtarget='○○○' data.csv のようにします。 こちらだと if 文の修正は必要ですが、BEGINブロックの修正はいりません。
お礼
ご丁寧に有り難うございました。出来るようになりました。