現在大学生ですがゼミ(ネットワークのゼミ)の先生の指導のもとAWKを勉強することになりました。理由はそんなにむずかしくないから、短い期間にはちゅうど良いということなのですが。実際はどういうところで使われているのでしょうか??また、勉強する価値はどんな程度でしょうか??僕は学生のうちはどんなプログラムでも勉強するのは悪くないとおもっているので頑張るつもりですが。どうも聞いたことの無いプログラムなもので気になりました。詳しい方もしくはAWKを極めている方、ぜひ教えてください。ちなみに私は一応大学でC言語とJAVAをかじっていますが、こんな私にとって難易度はどんなものでしょうか??Cをしっていたら結構簡単と教科書にはかいてあるのですが・・・。
No.3ベストアンサー
- 回答日時:
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より遥かに簡単です。
No.6
- 回答日時:
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.変数型は数値と文字しかありませんがこの変換も大変簡単です。ほとんど
考える必要は無い位で勝手にやってくれます
逆に低レベルの制御には使用できません。利用方面を考えて使えば便利なので
ぜひ、学んでみてください。
No.5
- 回答日時:
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 {
ファイルを読みおわってからする処理
}
No.4
- 回答日時:
awkはとても便利なツールで、よく grep, sed などと組み合わせて使います。
大事なところはすでに皆さんが書いていらっしゃるので、ちょっとしたコツだけ:
・テキストファイルで、行単位で考えることを基本にしてください。
・複雑なプログラムももちろん書けますが、それよりは単純な操作をするプログラムをパイプでどんどんつないでいった方が楽なことが多いし、中間結果を見ることができるので便利です。たとえば、
cat 元ファイル | awk ... | grep ... | sed ... | awk ... | awk ... > 結果ファイル
という感じです。もちろん、それぞれのコマンドの中身を別ファイルにするなり、スクリプトにしても結構。最後に結果ファイルに出力する代わりに、何らかのコマンドに入力として食わせることもできます。そのままメールしたりとかね。
ちょっと慣れれば、このような形でのファイル処理の柔軟性の高さに、きっと驚かれることでしょう…。
No.2
- 回答日時:
>実際はどういうところで使われているのでしょうか??
Unix系OSで、ファイルの変換なんかに使っています。
>どうも聞いたことの無いプログラムなもので気になりました。
プログラムと言うより、スクリプト言語と言う感じですね。
perlに近い感じだと思って頂ければ、感覚的に掴み易いと思います。
>詳しい方もしくはAWKを極めている方
全然、極めてません。
時々、ファイルコンバートに使う程度です。
>難易度はどんなものでしょうか??
Javaが理解出来ていれば、そんなに難しく無いと思いますよ。
これは、どの言語でも言える事ですが、考え方さえしっかりしてれば、言語は表記方法の問題だと思います。
頑張って、勉強して見て下さい。
No.1
- 回答日時:
手軽なテキスト処理用の言語という感じでしょうか。
perlの先祖みたいなものでperlが機能的にsh+sed+awkになってます。
perl程複雑な多彩なことはできませんが、構文がC言語に近いので、簡単なテキスト処理をさせるのには
手頃と思います。
また、テキスト処理に関して言えば,Cで書くと面倒なことも簡単にできたりします。
CやJAVAだと馴染みがないのは、正規表現と連想記憶配列あたりでしょうか。
これは、perlでも同じ機能がありますが。
あとは、楽勝でしょう。
実際どこで使われているかというと,あまり外には見えない分野でしょうか(^^;
ユーザーがちょっとしたテキスト処理の小物をプログラムを作って使うという感じでしょうね。
もともと大きなプログラムを書くための物ではないですし、
awkからperlへのトランスレーターもありますし、perl使えば済むともいえますので,目立ったところでは使わないのかも。
個人的にはよく使いますが。
perlはまだ覚えてませんし(^^;;;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- 中学校 理科だけが極端に苦手 5 2022/09/10 14:18
- 大学受験 偏差値40の受験生です。 現在19歳バイトしてなく武田塾に通ってます。 1日最低12時間勉強していて 6 2022/06/12 23:52
- 高校受験 こんにちは。今年新中3の女子です。私は現在ノー勉&授業ほぼ聞いてなくて5教科が111点でした。 国語 3 2022/03/25 13:36
- 大学受験 高三 進研模試偏差値34でした。 9月模試で英語と国語が30代前半でした。 英語のレベルは英検4級で 1 2022/10/08 14:32
- 大学・短大 続報 以前大学編入後に生じた問題から、こちらに質問 させていただいたものです。 詳しくご存知ない方に 1 2023/06/24 15:19
- 大学受験 通信制高校高3です。英語と国語について。 今から11月の終わり又は1月、2月の終わりまでに進研模試偏 5 2022/07/27 11:59
- 予備校・塾・家庭教師 通信制高校高3です。英語と国語について。 今から11月の終わり又は1月、2月の終わりまでに進研模試偏 1 2022/07/26 22:51
- 高校 国語が超苦手です。現代文もめちゃくちゃで、下手したら小学生レベルもできないかもしれません。 偏差値は 5 2023/04/03 19:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
楽しくて最高のプログラミング...
-
ラズパイpico PIOモード
-
小学1年生の子です。塾に行かせ...
-
プログラミング
-
pythonで複数画像からgifを作る...
-
Pythonでgif画像が上手く作れない
-
プログラミング ソースコード
-
正規表現で複数マッチ条件で悩...
-
vba クリップボードクリアにつ...
-
RTKPOSTのファイル生成について
-
windowsでテキストファイルの各...
-
Pythonって何を意識した言語な...
-
pythonにてseleniumを使うも、...
-
Gitについて質問。 クローンし...
-
スカラーのベクトル微分
-
matplotlibで任意の角度の円弧...
-
プログラミングで例えばゲーム...
-
Webサイト内に埋め込んだmp4動...
-
テキストファイルのファイル名...
-
Selenium4でボタンをクリックで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
chatGPTで次々と質問をしていく...
-
昔のパソコン少年の武勇伝「店...
-
スカラーのベクトル微分
-
ハッシュテーブル(連想配列)が...
-
最新のプログラム言語を学ぶに...
-
pythonにてseleniumを使うも、...
-
Windowsのアプリ開発ってなんの...
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
sublimit textっていうエディタ...
-
フリーランスのエンジニアって...
-
ExcelVBAでFormulaR1C1を列範囲...
-
matplotlibで任意の角度の円弧...
-
そのまま使っただけなのに・・...
-
家庭のパソコンで Python の 環...
-
初心者powershellのPS1ファイル...
-
Webプログラムってネイティブア...
-
httpリクエストの送り元の特定
-
プログラミングで例えばゲーム...
-
rpa化する言語としてら何があり...
おすすめ情報