- ベストアンサー
プログラミング言語AWKについて
現在大学生ですがゼミ(ネットワークのゼミ)の先生の指導のもとAWKを勉強することになりました。理由はそんなにむずかしくないから、短い期間にはちゅうど良いということなのですが。実際はどういうところで使われているのでしょうか??また、勉強する価値はどんな程度でしょうか??僕は学生のうちはどんなプログラムでも勉強するのは悪くないとおもっているので頑張るつもりですが。どうも聞いたことの無いプログラムなもので気になりました。詳しい方もしくはAWKを極めている方、ぜひ教えてください。ちなみに私は一応大学でC言語とJAVAをかじっていますが、こんな私にとって難易度はどんなものでしょうか??Cをしっていたら結構簡単と教科書にはかいてあるのですが・・・。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
AWKは、特に文字列処理を簡単に行うには最適な言語だと思います。数千行や数 万行のプログラムには向いていないのではないかと思いますが、数行でちょっと したテキスト処理(条件抽出や置換)、統計処理などをバッチ処理したい場合な どに、AWKが使えると大幅に時間短縮になります。 個人的に使っていて思うのは、テキスト処理用ツールとしては、 ・難易度及び高機能度 Perl > AWK > grepツール みたいな感じがあり、本格的なプログラミング言語としては、Perlには劣るけれ どもgrepよりはずっと高度なことができる、と思います。(まあ、grepは言語で はないですが...)。 でも、AWKでWebサーバをプログラミングしちゃった人もいるみたいで、 ・AWKhttpd - HTTPD written in AWK http://awk.geht.net:81/README.html やろうとおもえば、いろいろと高度なプログラミングもできます。あとは、 ・Effective AWK Programming(邦訳) http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_toc.html ここに入門ガイドがあります。 知っていれば、ちょっとした処理で人に差をつけられるかも、という意味で、 AWK学習おすすめです。多くのUNIXシステムに搭載されていると思いますし、知っ ていれば使う場面は結構あるとおもいますよ。難易度は、CやJAVAより遥かに簡単です。
その他の回答 (5)
- yfujii
- ベストアンサー率17% (14/80)
c言語と比較してawk(nawk)を使用した特徴を申し上げます。 テキスト処理用としては大変強力です。プログラムはc言語の100倍位短時 間で作成できます。 テキスト処理では、比較、検索、置換、分割、ファイルの読み書き等が主な処 理となりますが 1.正規表現での比較、マッチングができるので比較、検索、置換が超簡単。 また好きな文字でレコードをフィールドに簡単に分割できます。 たとえば文の1行を空白で区切られた文字列に分解する処理はc言語では 少し、考えて作成する必要がありますが、awkではなにも考えなくても勝 手にやってくれます。1行読み込んだ時点で$1~$NFに入っているので 考慮時間0秒です 2.検索は連想配列が使用できるので超楽 連想配列とはc言語の配列のインデックスに文字列が使えるのです。 辞書を考えてみると分かりますが、配列のなかの文字列を検索するのはか なり面倒ですがawkではtel["NTT"]="03-0000-1111";tel["kdd"]="03-222 -3333"と入れておけば、 s="NTT";print tel[s] のような形で利用できるのです これをc言語でやるとやはり色々考えなくてはなりません。 3.テキストファイルの入出力も大小記号1つなので楽です 4.変数型は数値と文字しかありませんがこの変換も大変簡単です。ほとんど 考える必要は無い位で勝手にやってくれます 逆に低レベルの制御には使用できません。利用方面を考えて使えば便利なので ぜひ、学んでみてください。
- a-kuma
- ベストアンサー率50% (1122/2211)
Cを知っているのであれば、1~2日もあれば、そこそこ使えるようになります。 awk 自体は文法や用意されている関数は簡単なのですが、正規表現が、そこそこ 奥が深いので、それなりに使いこなすように成るには、もうちょっとかかるかな。 で、使っているうちに No.4 の回答にある mide> ・テキストファイルで、行単位で考えることを基本にしてください。 を感覚としてつかむと、世界が広がります(というか、awk が得意な処理を 簡単に書けるようになる)。 蛇足を承知で、C のプログラムと対比させてみると、以下のような感じになります。 ■ C だと int main() { ファイルを開く前にする処理 in = fopen(対象ファイル, "r"); while (fgets(buf, sizeof(buf), in) != NULL) { if (条件1) { 行が条件1を満たすときの処理 } else if (条件2) { 行が条件2を満たすときの処理 } 全ての行に対する処理 } ファイルを読みおわってからする処理 return 0; } ■ awk だと BEGIN { ファイルを開く前にする処理 } 条件1 { 行が条件1を満たすときの処理 } 条件2 { 行が条件2を満たすときの処理 } { 全ての行に対する処理 } END { ファイルを読みおわってからする処理 }
- mide
- ベストアンサー率44% (333/745)
awkはとても便利なツールで、よく grep, sed などと組み合わせて使います。 大事なところはすでに皆さんが書いていらっしゃるので、ちょっとしたコツだけ: ・テキストファイルで、行単位で考えることを基本にしてください。 ・複雑なプログラムももちろん書けますが、それよりは単純な操作をするプログラムをパイプでどんどんつないでいった方が楽なことが多いし、中間結果を見ることができるので便利です。たとえば、 cat 元ファイル | awk ... | grep ... | sed ... | awk ... | awk ... > 結果ファイル という感じです。もちろん、それぞれのコマンドの中身を別ファイルにするなり、スクリプトにしても結構。最後に結果ファイルに出力する代わりに、何らかのコマンドに入力として食わせることもできます。そのままメールしたりとかね。 ちょっと慣れれば、このような形でのファイル処理の柔軟性の高さに、きっと驚かれることでしょう…。
- quenista
- ベストアンサー率28% (122/425)
>実際はどういうところで使われているのでしょうか?? Unix系OSで、ファイルの変換なんかに使っています。 >どうも聞いたことの無いプログラムなもので気になりました。 プログラムと言うより、スクリプト言語と言う感じですね。 perlに近い感じだと思って頂ければ、感覚的に掴み易いと思います。 >詳しい方もしくはAWKを極めている方 全然、極めてません。 時々、ファイルコンバートに使う程度です。 >難易度はどんなものでしょうか?? Javaが理解出来ていれば、そんなに難しく無いと思いますよ。 これは、どの言語でも言える事ですが、考え方さえしっかりしてれば、言語は表記方法の問題だと思います。 頑張って、勉強して見て下さい。
- terra5
- ベストアンサー率34% (574/1662)
手軽なテキスト処理用の言語という感じでしょうか。 perlの先祖みたいなものでperlが機能的にsh+sed+awkになってます。 perl程複雑な多彩なことはできませんが、構文がC言語に近いので、簡単なテキスト処理をさせるのには 手頃と思います。 また、テキスト処理に関して言えば,Cで書くと面倒なことも簡単にできたりします。 CやJAVAだと馴染みがないのは、正規表現と連想記憶配列あたりでしょうか。 これは、perlでも同じ機能がありますが。 あとは、楽勝でしょう。 実際どこで使われているかというと,あまり外には見えない分野でしょうか(^^; ユーザーがちょっとしたテキスト処理の小物をプログラムを作って使うという感じでしょうね。 もともと大きなプログラムを書くための物ではないですし、 awkからperlへのトランスレーターもありますし、perl使えば済むともいえますので,目立ったところでは使わないのかも。 個人的にはよく使いますが。 perlはまだ覚えてませんし(^^;;;