現在大学生ですがゼミ(ネットワークのゼミ)の先生の指導のもとAWKを勉強することになりました。理由はそんなにむずかしくないから、短い期間にはちゅうど良いということなのですが。実際はどういうところで使われているのでしょうか??また、勉強する価値はどんな程度でしょうか??僕は学生のうちはどんなプログラムでも勉強するのは悪くないとおもっているので頑張るつもりですが。どうも聞いたことの無いプログラムなもので気になりました。詳しい方もしくはAWKを極めている方、ぜひ教えてください。ちなみに私は一応大学でC言語とJAVAをかじっていますが、こんな私にとって難易度はどんなものでしょうか??Cをしっていたら結構簡単と教科書にはかいてあるのですが・・・。

このQ&Aに関連する最新のQ&A

A 回答 (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より遥かに簡単です。
    • good
    • 0

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.変数型は数値と文字しかありませんがこの変換も大変簡単です。ほとんど
  考える必要は無い位で勝手にやってくれます

逆に低レベルの制御には使用できません。利用方面を考えて使えば便利なので
ぜひ、学んでみてください。
    • good
    • 0

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 {
  ファイルを読みおわってからする処理
}
    • good
    • 0

awkはとても便利なツールで、よく grep, sed などと組み合わせて使います。



大事なところはすでに皆さんが書いていらっしゃるので、ちょっとしたコツだけ:

・テキストファイルで、行単位で考えることを基本にしてください。
・複雑なプログラムももちろん書けますが、それよりは単純な操作をするプログラムをパイプでどんどんつないでいった方が楽なことが多いし、中間結果を見ることができるので便利です。たとえば、

cat 元ファイル | awk ... | grep ... | sed ... | awk ... | awk ... > 結果ファイル

という感じです。もちろん、それぞれのコマンドの中身を別ファイルにするなり、スクリプトにしても結構。最後に結果ファイルに出力する代わりに、何らかのコマンドに入力として食わせることもできます。そのままメールしたりとかね。

ちょっと慣れれば、このような形でのファイル処理の柔軟性の高さに、きっと驚かれることでしょう…。
    • good
    • 0

>実際はどういうところで使われているのでしょうか??


Unix系OSで、ファイルの変換なんかに使っています。

>どうも聞いたことの無いプログラムなもので気になりました。
プログラムと言うより、スクリプト言語と言う感じですね。
perlに近い感じだと思って頂ければ、感覚的に掴み易いと思います。

>詳しい方もしくはAWKを極めている方
全然、極めてません。
時々、ファイルコンバートに使う程度です。

>難易度はどんなものでしょうか??
Javaが理解出来ていれば、そんなに難しく無いと思いますよ。

これは、どの言語でも言える事ですが、考え方さえしっかりしてれば、言語は表記方法の問題だと思います。

頑張って、勉強して見て下さい。
    • good
    • 0

手軽なテキスト処理用の言語という感じでしょうか。



perlの先祖みたいなものでperlが機能的にsh+sed+awkになってます。
perl程複雑な多彩なことはできませんが、構文がC言語に近いので、簡単なテキスト処理をさせるのには
手頃と思います。
また、テキスト処理に関して言えば,Cで書くと面倒なことも簡単にできたりします。

CやJAVAだと馴染みがないのは、正規表現と連想記憶配列あたりでしょうか。
これは、perlでも同じ機能がありますが。

あとは、楽勝でしょう。


実際どこで使われているかというと,あまり外には見えない分野でしょうか(^^;
ユーザーがちょっとしたテキスト処理の小物をプログラムを作って使うという感じでしょうね。
もともと大きなプログラムを書くための物ではないですし、
awkからperlへのトランスレーターもありますし、perl使えば済むともいえますので,目立ったところでは使わないのかも。
個人的にはよく使いますが。
perlはまだ覚えてませんし(^^;;;
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qおすすめのプログラミング言語を教えてください

おすすめのプログラミング言語を教えてください

理由とともに回答をお願いいたします。

ちなみに私はこれからプログラミング言語を覚えようと思っている初学者です。

Aベストアンサー

うーん?
プログラミング言語を覚えることが目的ですか?
そのプログラミング言語で何らかのソフトウェアを作ることが目的ではないのでしょうか?

言語によって得意/不得意があります。
例えばWebアプリケーションを作るなら、Java,Perl,PHP,Ruby,ASP.NETなどの言語を使うのが良いです。
Windowsアプリケーションなら、VB.NET,C,C++,C#.NETの方が良いです。
Flashでゲームを作るのならAdobe Flash(Action Script)になりますし、
機械を直接制御するならCやアセンブラを使います。

何をしたいかによってお勧めが変わってきますので、やりたいことを補足してください。

Qいまから勉強するなら、どんなwebプログラム言語がおすすめでしょう?

webで使うプログラム言語のうち、いまから勉強するものとして、あえて言うなら何がおすすめでしょう?

javascript perl php actionscript。。色々ありますが…

Aベストアンサー

クライアントサイドならJavaScriptでしょうね。
サーバサイドなら最近のトレンドとしてはPHP,Java,.NET(.NETは言語じゃないけど…)といった辺りでしょうか。私はやったことないですけどRubyなんかも良いようです。
プログラミングなどの経験が少ないのならASP,Perl,PHPなどが取りかかりやすいのでお勧めです。
JavaはWebプログラミングの経験がない人には環境構築すら難しいのであまりお勧めではありません。
.NETは初心者でも(Visual Studioを使えば)簡単に作れるようになっています。WebMatrixなどのフリーツールで作るとなると初心者ではきついです。

ちなみに趣味でやるなら何でもいいですが、仕事にしたいならばJavaや.NETが使えた方が良いです。

Qおすすめのプログラミング言語

おすすめのプログラミング言語を教えてください。
今使っているプログラミング言語
ひまわり
なでしこ
プロデル
TTSneo
delphi5

Aベストアンサー

こんにちは。

目的によってオススメって変わると思います。
目的がわかれば的確な回答が付くかもしれません。

QAWK, RUBY, PEARLについて,今さら人に聞けない質問です。

AWK, RUBY, PEARLについて,今さら人に聞けない質問です。
当方,AWKのユーザです。
これらは,どれも文字列処理言語ということです。
AWKについては,それで何の疑問もないのですが,
RUBY, PEARLでは,オラクルというデータベースやMS-Excelにもアクセスできるそうです。
たかだか文字列処理言語なのなぜこのようなことができるのでしょうか?
どなたか教えてください。

Aベストアンサー

awkもsystem関数で外部コマンドの実行ができたりするでしょう?

要するに与えられたスクリプトを読み込み、解釈して実行しているわけで、「文字列処理言語」だというのは、単に文字列処理に便利な構文なり関数などの機能を用意しているからというだけのことで、別段「文字列処理しかできない」という意味じゃないです。

Q初心者がまず始めるプログラミング言語はなにはおすすめ?

こんにちは。
プログラムについてほぼまったくの初心者です。
シューティングゲームやファミコンの頃のようなマリオ系アクションがつくりたいです。また、就職時や特技として履歴書に書ける、役に立つプログラミング言語が学びたいです。
使っているOSはXPです。
C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。
たくさんあるプログラミング言語の中から、初心者にもわかりやすくて、また、他のプログラミング言語への勉強にもなるようなプログラミング言語はあるでしょうか?
おねがいします。

Aベストアンサー

> C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。

 厳しいですね。C言語の初歩程度でへこたれているようでは「就職時や特技として履歴書に書ける、役に立つプログラミング言語」のマスターはおぼつかないでしょう。が,C言語が初心者向きでないのもまた事実です。

 私としては,初心者には Python をお奨めします:

  ‐汚いプログラムが書きにくいような文法になっており,ああも書ける,こうも書けるといった,初心者を戸惑わせる文法事項が少ない
  ‐綺麗なプログラムを書かないと気持ち悪くなるという,良い習慣が身につく
  ‐文法が比較的単純
  ‐処理系が無料で手に入る
  ‐世界的に広く使われている
  ‐オブジェクト指向もできる

 その後で,JavaScript に進んでみてはいかがでしょうか。毛色の異なるいろいろな言語に慣れておく必要があり,将来,Java, C#, C, C++ などの言語に進むためにも。

 また,視野を広げるために Scheme, Common Lisp や ML, OCaml, Haskell, Erlang など関数言語のたぐいや,Perl や Ruby, sed, Awk などのスクリプト言語の本にも目を通されることをお勧めします(いずれも世界的に有名で,処理系が無料で手に入ります)。

 それから Java や C# などに取り組めば良いと思います。そして,C や C++ も勉強しておく必要があります。

 私自身は,仕事の都合でCOBOLとアセンブラを先に勉強し,かなり後になってC言語を勉強したので,C言語のポインタのどこが難しいのか分かりませんでした(C言語のポインタは簡単です(^^;)。ただし,アセンブラは余力があるときに限り取り組めばよいでしょう(でも,CASL関連の本には目を通しておくべき)。

> C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。

 厳しいですね。C言語の初歩程度でへこたれているようでは「就職時や特技として履歴書に書ける、役に立つプログラミング言語」のマスターはおぼつかないでしょう。が,C言語が初心者向きでないのもまた事実です。

 私としては,初心者には Python をお奨めします:

  ‐汚いプログラムが書きにくいような文法になっており,ああも書ける,こうも書けるといった,初心者を戸惑わせる文法事項が少...続きを読む

Qawkで別のファイルを参照して、検索結果を得たい。

awk初心者です。
あるファイル(targetファイル)に、どのような属性があるのかを検索ファイル(objectファイル)を
使って調べたいのです。そこでawkを使って:

targetファイル
5
a
c

objectファイル
1,aa
2,bb
3,cc
4,dd
5,aa
6,bb
7,cc
8,dd
9,aa
10,bb
a,cc
b,dd
c,aa
d,bb
e,cc
f,dd
g,aa
h,bb
i,cc
j,dd

以下のようなスクリプトを作成し
mawk32 -f スクリプト target.txt object.txt
としたのですが、動作しません。
何らかの御助言を頂ければ幸いです。

#targetファイル読み込み
FILENAME == ARGV[1]{
dat1[FNR]=$1
no_dat1 = FNR
}
#objectファイル読み込み
FILENAME == ARGV[2]{
dat2[FNR]=$0
no_dat2 = FNR
}
#相互に検索
END{
for (i = 1; i <= no_dat1; i++){
for (j = 1; j <= no_dat2; j++){
if (dat1[i]~/dat2[j]/) { print dat1[i],dat2[j] }
}}}

awk初心者です。
あるファイル(targetファイル)に、どのような属性があるのかを検索ファイル(objectファイル)を
使って調べたいのです。そこでawkを使って:

targetファイル
5
a
c

objectファイル
1,aa
2,bb
3,cc
4,dd
5,aa
6,bb
7,cc
8,dd
9,aa
10,bb
a,cc
b,dd
c,aa
d,bb
e,cc
f,dd
g,aa
h,bb
i,cc
j,dd

以下のようなスクリプトを作成し
mawk32 -f スクリプト target.txt object.txt
としたのですが、動作しません。
何らかの御助言を頂ければ幸いです。

#targetファイル読み込み
FILENAME == ARGV[1]{
...続きを読む

Aベストアンサー

$ awk -f select.awk target.txt object.txt
5 2,aa
a 2,cc
c 2,aa

この↑結果がほしいのかな?

[select.awk]
BEGIN {
FS=","
}
#targetファイル読み込み
FILENAME == ARGV[1]{
tgt[FNR]=$1
no_tgt = FNR
}
#objectファイル読み込み
FILENAME == ARGV[2]{
obj1[FNR]=$1
obj2[FNR]=$2
no_obj = FNR
}
#相互に検索
END{
for (i = 1; i <= no_tgt; i++){
for (j = 1; j <= no_obj; j++){
if (tgt[i] == obj1[j]) { print tgt[i],obj1[2]","obj2[j] }
}}}

それとも、こっち↓?

$ awk -f select.awk target.txt object.txt
5 5,aa
a 1,aa
a 5,aa
a 9,aa
a a,cc
a c,aa
a g,aa
c 3,cc
c 7,cc
c a,cc
c c,aa
c e,cc
c i,cc

これなら、元のコードの
if (dat1[i]~/dat2[j]/) { print dat1[i],dat2[j] }

if (dat2[j] ~ dat1[i]) { print dat1[i],dat2[j] }
にかえればできるよ。

$ awk -f select.awk target.txt object.txt
5 2,aa
a 2,cc
c 2,aa

この↑結果がほしいのかな?

[select.awk]
BEGIN {
FS=","
}
#targetファイル読み込み
FILENAME == ARGV[1]{
tgt[FNR]=$1
no_tgt = FNR
}
#objectファイル読み込み
FILENAME == ARGV[2]{
obj1[FNR]=$1
obj2[FNR]=$2
no_obj = FNR
}
#相互に検索
END{
for (i = 1; i <= no_tgt; i++){
for (j = 1; j <= no_obj; j++){
if (tgt[i] == obj1[j]) { print tgt[i],obj1[2]","obj2[j] }
}}}

それとも、こっち↓?

$ awk -f select.awk target.txt obje...続きを読む

Qおすすめのアートプログラミング言語

今僕はアートプログラミングについて興味を持っておりいずれはARやCGなどを駆使したメディアアートを作れるようになりたいと思っています
そこで質問なのですがアートプログラミング初心者おすすめのプログラミング言語はなんでしょうか

processingやopenFramewarksなどの言語があることを知りましたがイマイチどの言語を勉強すべきかわかりません是非教えてください
ちなみに最低限のC言語,javaプログラミングはできます

Aベストアンサー

5流プログラマーの意見(アート系なので技術屋ではない)

回答というより質問返しなのですが、C言語・javaができる方がprocessingやopenFramewarksが必要なのですか??

私自身ProcessingやってますがProcessingってぶっちゃけJavaですよ。Javaのライブラリーとかインポートして動かせます。
Java使いこなせる人なら一日でProcessingなんて使いこなせると思います。


processingやopenFramewarksはどちらかというとインタラクティブアート系でArduinoなんかと一緒に使います。
実行速度が遅いのでProcessingでCGだとそこまで大したことは出来ないです。

目標のレベルが高いのでprocessingやopenFramewarksより普通のプログラミング言語の方が良いかと思います。
私自身Cとか勉強したこと無いのであれですが、多分Processingなんかより役に立つと思います。
実際Cでメディア・アート作っている方もいます。

ARはProcessingで確かある程度できます(ライブラリーがあったはず)けど実際CGはほとんどリアルタイムではできないので適当な3Dソフトで作ってる場合が多いと思います。
CGなどを駆使ししたいのであればMELとかPhythonなんかもありかもしれません、AutodeskMayaなんかのプログラムに役立つので。パーティクル系の3Dソフトも多分プログラム必要なのでそちらに絞るのもありかと。

5流プログラマーの意見(アート系なので技術屋ではない)

回答というより質問返しなのですが、C言語・javaができる方がprocessingやopenFramewarksが必要なのですか??

私自身ProcessingやってますがProcessingってぶっちゃけJavaですよ。Javaのライブラリーとかインポートして動かせます。
Java使いこなせる人なら一日でProcessingなんて使いこなせると思います。


processingやopenFramewarksはどちらかというとインタラクティブアート系でArduinoなんかと一緒に使います。
実行速度が遅いのでProcessingでC...続きを読む

Qプログラム勉強

WEBのプログラムの勉強をしたいと思っているのですが、
何から勉強していいかわかりません。
初心者なのでわかりやすい勉強方法を教えてください。

Aベストアンサー

Windows機しかないかもしれないので、Windowsでの方法を。

まずプログラムを動かす環境を、ご自分のPCで構築します。
インストールするものは
・Apache(Webサーバー)
・PHP(プログラム実行環境)
・MySQL(データベース)
手順はこの辺りが参考になるでしょう
http://allabout.co.jp/internet/database/closeup/CU20030227/index.htm

開発の準備ができたらPHPプログラムの入門サイトなどを参考に掲示板やアクセスカウンタなどのプログラムを作ってみるといいでしょう。
http://www.google.co.jp/search?complete=1&hl=ja&q=PHP+%E5%85%A5%E9%96%80&lr=

個人的な意見としては、ネットの情報でも勉強できますが、やはり本屋に行って自分のレベルにあった本を何冊か購入される事をお勧めします。
ネットでこれで本当にいいのか?と悩みながらやるより本の内容にそって順にステップアップして行く方が知識に抜けが出にくいし、楽だと思いますよ。

Windows機しかないかもしれないので、Windowsでの方法を。

まずプログラムを動かす環境を、ご自分のPCで構築します。
インストールするものは
・Apache(Webサーバー)
・PHP(プログラム実行環境)
・MySQL(データベース)
手順はこの辺りが参考になるでしょう
http://allabout.co.jp/internet/database/closeup/CU20030227/index.htm

開発の準備ができたらPHPプログラムの入門サイトなどを参考に掲示板やアクセスカウンタなどのプログラムを作ってみるといいでしょう。
http://www.google.co.jp/s...続きを読む

Qおすすめのプログラミング言語を教えてください

35歳SEです。
しかしSEとは名ばかりで、実際にシステムを1から設計したことも無く、
プログラミングについてもほとんどできません。
まともに扱えるのが、
・SQL(PL/SQL含む)
・C言語
くらいです。
もはやプログラマという年齢ではないのですが、
趣味や自己研鑽の一環として、何かプログラミング言語を身に着けたいと考えています。
この状況下で何かオススメのプログラミング言語はありますでしょうか。
ちなみに仕事はネットワーク系Web系システム開発なので、
それに活かせるとより良いです。

どうぞご教示のほど、よろしくお願いいたします。

Aベストアンサー

個人レベルで、ということであって、業務に使うとかいうわけではないのですね。

でしたら、個人的にはJava + Google App Engineをおすすめしたいです。

Javaは、現在、C/C++と並ぶ2大言語としての地位を築き上げており、覚えて損はありません。特に、これから先、スマートフォンなどの端末やWebベースの開発が今以上に重視されるようになることを考えると、AndroidとサーバーサイドJavaを持っているJavaはもっとも重要な言語となってくるように思います。

今までは、Javaが動くサーバーというのが一般的でなかったため、個人レベルでは「勉強しても使う場がない」という感じだったんですが、今はGoogle App Engine(Googleが提供するクラウドサービス)などで、誰でも無料でサーバーアプリケーションが作れるようになっています。

また、AndroidもJavaを採用しており、誰でも簡単にGoogle Playでアプリを公開できます。勉強して、自分で作ったアプリを実際に公開して使ってもらえば、フィードバックももらえ、更に学習意欲がわきますよ。それに作ったアプリがヒットしてどっとお金が入ってくる可能性もないわけではないですし(笑)。

個人レベルで、ということであって、業務に使うとかいうわけではないのですね。

でしたら、個人的にはJava + Google App Engineをおすすめしたいです。

Javaは、現在、C/C++と並ぶ2大言語としての地位を築き上げており、覚えて損はありません。特に、これから先、スマートフォンなどの端末やWebベースの開発が今以上に重視されるようになることを考えると、AndroidとサーバーサイドJavaを持っているJavaはもっとも重要な言語となってくるように思います。

今までは、Javaが動くサーバーというのが一般的でなか...続きを読む

Qawkについて

awkで1から10までを足して,答えをa.datに保存するというプログラムはどのように記述すればよいでしょうか?

Aベストアンサー

awk </dev/null '
BEGIN {
sum = 0;
for (i = 1; i <= 10; ++i) {
sum += i;
}
print sum > "a.dat"
}'


人気Q&Aランキング

おすすめ情報