• ベストアンサー

AWKスクリプへの引数の受け渡し

AWKスクリプトへの引数の受け渡し法がよくわかりません。 具体的には以下のようなスクリプトです。 #!/bin/nawk -f { if( $1 == "2" ) printf( "2 CHK;\n" ); else print $0; } このスクリプトの”CHK”という文字列をスクリプト起動時 にこのスクリプトに引渡してスクリプトの動作を動的に変更したいのですが、方法がよくわかりません。 また、このスクリプトの起動はシェルスクリプトから起動 させることを考えています。 ご存知の方アドバイスをお願いします。

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

やりたいのはこういうことですか? chk.awk -v CHK=chk #!/bin/nawk -f BEGIN { if (CHK=="") CHK="CHK"; } { if( $1 == "2" ) printf( "2 %s;\n",CHK ); else print $0; }

Kasaoka-Taroh
質問者

お礼

ばっちりうまくいきました。 今まで、引数の受け渡し法がよくわからなくて苦労していましたが、これでかなり便利に使用できるようになりそうです。 どうもありがとうございました。

関連するQ&A

  • awk '{print $1}' file をもっと簡単に書きたい

    awkで最も頻繁に使うのが、fileのN列目だけを抜き取ってくるという使い方なんですが ↓ awk '{print $N}' file Nとfileという2つの引数しか使わないのでこれを   my_awk N file  といった具合に間単に使える my_awk シェルを作りたいんですが、$のあたりがうまくかけません、どう直せばいいでしょうか?↓ #!/bin/csh awk '{print $$1}' $2

  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • awkコマンドに引数を渡す方法

    awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。

  • UNIX awkコマンド

    シェルスクリプトで、awkをつかって計算を行いたいのですが、 例えば、 file1 5040 というものが入っていたとして、 1列目の5と3列目の4を抽出して 5-4をさせて、 新しいファイルに、1という結果を保存したい場合、 どのようにしたらよいのでしょうか?? awk '{printf("%s\n",substr(0,1-3,1))} file1 > newfile でできると思ったのですができませんでした。 わかる方いましたら教えてください。

  • awk詳しい方へ

    あるファイルの最終行のみ、他の行と出力形式を変えたいのですが awkとNRを使ってスマートにできないでしょうか? 詳しい方ご教授お願いします。 不細工に作ると(ファイル名xxxのとき) nnn=`wc -l xxx | awk '{print $1}'` awk '{ if (NR != $nnn) printf("%s %s \n",$1,$2) else printf("%s %s \n",$3,$4) }' aaa こんな感じでしょうか。 なんか、一行とかでかけないでしょうか?

  • シェルスクリプトの中のawkユーザー定義関数

    cシェルの中でawkのユーザー定義関数を使う方法について教えてください。 以下の内容の入力ファイルがあったとして、 3 3 306 2 2 258 1 1 105 3列目を数値の大小に応じて、別の数値に置き換えて以下のファイル 3 3 10 2 2 9 1 1 8 を出力したいのです。 cシェルスクリプト中でawkのユーザー定義関数を使って作成したいのですが、シェルスクリプト中に関数をどこでどう定義してよいか分かりません。 cシェルスクリプトの中身は #/bin/csh -f gawk'{print $1,$2,symbolsize($3)}' input_data > output_data で、以下の関数を定義したいのです。 function symbolsize(ccc){ if (ccc >= 300) return 10 #300以上なら10を返す if (ccc >= 200 && ccc < 300) return 9 #200以上300未満なら9を返す else return 8 #それ以外なら8を返す } プログラミング初心者なので、なにとぞよろしくお願いします。

  • awk in csh

    cshスクリプトの中で、awkと連動させたプログラムを書こうとしています。 以下の様なテーブルファイル(hoge.txt)があると想定してください。 1 0.01 0.52 3.23 ..... 2 0.22 9.34 8.22 ..... 3 0.44 0.68 3.81 ..... ... (列も行も揃っている数値だけのテーブル) 例えば、変数hogeに第2行、第2列の数値(文字列)0.22を代入する際、 シェルスクリプト内部で、 @ hoge = `awk 'NR==2' {print $2} hoge.txt` としましたが、$2をスクリプトに与えられた2番目の引数だと解釈して、 うまく動作しません。 試しに$2 -> \$2に変換してみましたが、ダメでした。 (\の後に改行がないというエラーが出ました) 第i列目,j行目の文字列を取り出すにはどのようにすれば良いでしょうか。

  • シェルスクリプトで/bin/awkって何ですか?

    シェルスクリプトで/bin/awkって何ですか?

  • awkについて

    度々すみません。awkについて先程教えて頂いたものですが、少し変更しようと思っているのですが上手くいきません。変更していることは、以下の○○○の内容を固定ではなくてコマンドラインから渡したいです。 ウェブで調べたところARGVというのを使うことはわかりました。そこで"○○○"からARGV[0]に変更してコマンド実行時に引数を与えたのですが、「○○○というファイルを開けません」というエラーになってしまいます。実行したのはawk -f awk data.csv ○○○です。なぜ引数をファイル名だと認識してしまうのでしょうか。初歩的で申し訳ありませんが教えて下さい。 BEGIN{ goukei = 0 count = 0 } { #フィールドの8番目の条件が一致する場合のみ9番目を合計 if($8=="○○○"){ goukei += $9 count++ } } END{ if(count!=0){ print "合計は", goukei print "平均は", goukei/count } else{ print "条件に一致するのない” } }

  • 引数の受け渡しに関して

    教えて下さい。 入力画面(AAA_NEW.php)より入力された情報が正しいかどうかをチェックするPREVIEW画面という画面を設け、 エラーがあった場合は、また入力画面に戻るような事をしたいと考えています。 そこで、以下のような記述をしましたが、エラーの際に戻る場合に入力情報が消えてしまっている為、引数として 渡すような事を考えていますが、どのような方法があるでしょうか? PHPで input type='hidden' なんかが使えれば、私もわかるのですが、、、 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。 《PREVIEW画面》 ↓ここで入力画面からの引数を取得 if($_POST['p_syamei'] != NULL) { $tmp_p_symei = $_POST["p_syamei"]; }else{ $ERR_FLAG1 = 1; } if($_POST["p_syamei_furigana"] != NULL) { $tmp_p_syamei_furigana = $_POST["p_syamei_furigana"]; }else{ $ERR_FLAG2 = 1; } <script> function btn_ins2() { window.open("about:blank","window_name","width=640,height=480,scrollbars=yes,menubar=yes,toolbar=yes,status=yes"); document.f_od.target = "window_name"; document.f_od.method = "POST"; document.f_od.action = "AAA_NEW.php"; document.f_od.submit(); } </script> ********************************************************** <?php if ($ERR_FLAG1 == 1){ print("社名を入力して下さい。"); print("<TD><DIV Align='right'><input type='button' name='btn_order' onclick=btn_ins2() value=' 戻る '></DIV></TD>\n"); die; }else if($ERR_FLAG2 == 1){ print("社名フリガナを入力して下さい。"); print("<TD><DIV Align='right'><input type='button' name='btn_order' onclick=btn_ins2() value=' 戻る '></DIV></TD>\n"); die; } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう