- ベストアンサー
AWKスクリプト作成法
AWKで次のようなプログラムを作成したいと考えています。 A = B AND C D = E NOT A といったような簡単な論理演算を記述しているプログラムらしきものがあるが、例えば上記の例で2行目でE,Aを使用しているが、その場合はE,Aを使用してDを作るより以前にE,Aを定義していなければならない。このルールを守っていない個所をチェックするAWKスクリプトの 記述法、アルゴリズムを教えて下さい。できれば、更に 不正な記述を修正して並べ換えてくれればベストですが..
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1カラム目は必ず変数で、2カラム目は必ず「=」ですか? とりあえず、そう仮定します。 例題の1行目もB,Cが未定義になってしまうので、 B C A = B AND C D = E NOT A という入力ファイルということにします。 --logic.awk--(コードの例) #!/bin/awk -f BEGIN{ op["NOT"] op["AND"] op["NAND"] op["OR"] op["NOR"] } { print $0 if(NF>0) defined[$1] if(NF>=3){ for(i=3;i<=NF;i++){ if( !($i in op) ){ if( !($i in defined) ){ print " "$i" is used but not defined." } } } } } ---- --logic.dat--(入力ファイル) A B C = A AND B D = C AND F ---- --実行例と結果-- $ awk -f logic.awk logic.dat A B C = A AND B D = C AND F F is used but not defined. $ ---- アルゴリズムを考えても、実際コーディングしてみないとアルゴリズムにバグがあるかもしれないので、コーディングしちゃいました。