web-dev-qa-db-ja.com

AWKを学ぶ理由はまだありますか?

私は問題に対して適切なソリューションを使用するのが好きなので、私は常に古いツールであっても新しいツールを学んでいます。

それにもかかわらず、それらのいくつかを学ぶ理由がまだあるのだろうか。たとえばawkは興味深いですが、単純なテキスト処理にはgrepcutsedなどを使用できますが、複雑なものには、 Pythonに行きます。

今では、それが強力で便利なツールではないという意味ではありません。しかし、新しいツールを学ぶには時間と労力がかかるため、それだけの価値はありますか

99
e-satis

あなたがいる環境に依存すると思います。あなたが* nixの人なら、awkを知ることは良いことです。事実上すべての* nixにある他のスクリプト環境は、shです。したがって、grepsed,などは、現代の主流のawkディストリビューションのlinuxを確実に置き換えることができます。よりエキゾチックなシステムに移行すると、少しのawkが本当に便利になります。

awkは、テキスト処理以外にも使用できます。たとえば、私のスーパーバイザーの1人は、天文コードをawkに書き込みます。つまり、彼は古い学校awesomeである。彼の時代に、それは仕事に最適なツールでした...そして今、私のような彼の学生はpythonを使用していますが、そうでない場合、彼は彼が知っていることとうまく機能します。

最後に、少しのawkが害を及ぼさないことを知って、世界中で多くの古いコードが蹴られています。また、あなたを良くするでしょう* nix person :-)

92
freespace

Awkの基本をすぐに学べば、コマンドラインで驚くべきことができます。

しかし、realawkを学習する理由は、superb book著者のAho、Kernighan、WeinbergerによるAWKプログラミング言語。名前から、それは単にawkを教えていると思うでしょう。実際、それはほんの始まりに過ぎません。文字列の操作を簡単にする簡潔なスクリプト言語を使用すると、取り組むことができる膨大な問題に乗り出すことができます。awkは最初のものの1つでした。 、および(メモリが私に役立つ場合)小さなプロジェクト固有のコンピューター言語のコンパイラー!彼らがawkを使用してサンプルのオペレーティングシステムもプログラムしていれば、この本はコンピューターサイエンスのかなり完全な調査入門だったでしょう!

オリジナルのC言語の本のように、はっきりと簡潔に書かれているので、友好的なテクニカルライティングの正しい例でもあります。インデックスでさえ、職人の技です。

あぁ?知っている場合は、コマンドラインでときどき使用しますが、それよりも大きい場合は、システムの幅広い機能やPythonのようなものが提供するインターネットにアクセスできなくなります。へのアクセス。しかし、本?あなたはいつもあなたがそれを読んでうれしいです!

94
Brandon Rhodes

awkを使用する唯一の理由は、自動分割です。

awk '{print $3}' < file.in

これは、file.inの3番目の空白区切りフィールドを印刷します。以下より少し簡単です:

tr -s ' ' < file.in | cut -d' ' -f3
28
Greg Hewgill

ファイルにcolumns/fieldsが含まれている場合、awkは素晴らしいと思います。複数列ファイルの特定の列を処理/分析するときに使用します。または、特定の列を追加/削除したい場合。

例えば.

awk -F \t '{ if ($2 > $3) print; }' <filename>

タブ区切りファイルの2列目の値が3列目の値より大きい場合にのみ印刷されます。

もちろん、PerlまたはPythonを使用することもできますが、awkを使用すると、1行の簡潔なコマンドで非常に簡単になります。

また、awkの学習は非常に低コストです。 awkの基本は1時間以内で習得できるため、他のプログラミング/スクリプト言語を習得するのと同じくらいの労力です。

23
Nikhil

HTMLの処理にAWKを時々使用します。たとえば、次のコードはテーブルをcsvファイルに変換します。

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

スクリーンスクレイピングを行う場合、これは素晴らしいことです。実際、AWKが大好きなのは、問題の間違った解決策を非常に迅速に構築できるためです:) その他の例 。 Jon Bentleyの素敵な Programming Pearls にも記載されています。

7
Dave

私はawkを頻繁に使用しています。パイプラインの途中で非常に単純なテキストをシャッフルするのに適しています。それは、まったく必要としないか、Perl/Python/whateverをホイップする必要があるかの間の非常に狭いニッチを埋めます。

これに多くの時間を費やすことはお勧めしませんが、構文の基本を知ることは便利かもしれません-少なくともそれを使いたいならすぐにマニュアルを調べることができます。

5
Eevee

ほとんどのawk oneライナーは、Perl oneライナーで達成できます-Perl oneライナーの考え方に入ることを選択した場合。または、Perlの3つのライナーを使用してください:)

Awkが好きな人が書いたシェルスクリプトを管理している場合は、明らかに、awkを学ぶ必要があります。

実用的な必要性がなくても、正規表現を既に知っている場合、基本を習得するのに時間がかからず、当時のものがどのように設計されたかを見るのは楽しいです。かなりエレガントです。

5
slim

Sedをすでに知っていて使用している場合は、少なくとも少しawkを使用することもできます。それらはいくつかの非常に強力なトリックのために一緒にパイプすることができます。常に観客を感動させます。

4
Internet Friend

この質問をしてから6年後、私は確実に答えることができるようになりました。いいえ、awkを学ぶことは価値がありません。

基本的なタスクはハンドルですが、基本的なbashコマンド、またはGUIツールさえも簡単です。 Python(favまたはmine)またはRuby)などの最新の動的言語を使用すると、より複雑なタスクに簡単に取り組むことができます。

非常に多くのタスク(Web、管理、データ処理、自動化など)で役立つように、mordernスクリプト動的言語を明確に学習する必要があります。そうすることで、awkなどのツールをまったく役に立たなくすることで、毎月数秒の節約になります。

4
e-satis

Computerworldは最近、AWKについてAlfred V. Aho(AWKの3人のクリエイターの1人)と インタビュー を行いました。とても興味深い読み物です。そのため、AWKを学ぶのが良い理由であるヒントを見つけることができます。

3
dlat

AWKを学ぶことは、Perlも他のほとんどのスクリプト言語もインストールされていない組み込みLinuxシステムでの最後の契約で私にとって非常に貴重でした。

3
George Jempty

awkのユーティリティ/難易度は非常に優れており、「simple awk」はすべてのUnix/Linux/MacOSで機能します(他のシステムにもインストールできます)。

人々がタイピングを嫌う黄金時代に設計されたので、スクリプトは非常に短く、速く書くことができます。高速バージョンのmawkをインストールしようとします。これは計算を約9倍高速化し、awk/gawkはかなり遅いので、Rなどの代わりに使用したい場合はmawkが必要になる場合があります。

2
BongBong Chu

シェルスクリプトの実行中にデータやプログラムの出力のためにログファイルをときどき解析する必要がある場合に便利です。

それは確かにそれ以上の力を持っていますが、これはほとんどの人が使用するタスクのようです。

2
NeuroSys

もちろん、私は利用可能な言語が(COBOL、OMG、OMGを生成する一部のshity言語)、bash(古いバージョン)、Perl(まだマスターしていない)、sed、awkのみの環境で作業しています、およびその他のコマンドラインユーティリティ。 awkを知っていると、数時間節約できました(そして、同僚からいくつかのテキスト処理タスクを生成していました-少なくとも1日に3回は私のところに来ました)。

2
Zsolt Botykai

もう価値がないと思います。検索機能を備えたsedよりもはるかに汎用性の高いストリームエディターとして時々使用しますが、pythonに習熟している場合、終了できるタスクがわからない場合それはawkを学ぶのに必要な時間を補うためにはるかに速い。

次のコマンドは、おそらく過去2年間にawkを使用した唯一のコマンドです(Debian/Ubuntuシステムから半分削除されたパッケージを削除します)。

$ dpkg -l|awk '/^rc/ {print $2}'|xargs Sudo dpkg -P
1

いや。

おもしろいかもしれませんが、Perkなどの他の強力なツールを使用して、awkでできることはすべて実行できます。

これらのより強力なツールを学ぶのに時間を費やしてください-そして偶然に途中でawkを拾うだけです。

1
Ed Guiness

あると思います。単純なものについては、AWKはPythonよりも経験の浅いsysadmin /開発者にとってはるかに簡単です。少しのAWKを学び、多くのことを行うことができます。Pythonを学ぶということは、まったく新しい言語を学ぶことを意味します(はい、AWKは言語でもあります)。

PerlはAWKでできることの多くを実行できる可能性がありますが、この日と年齢に選択を提供しました。ここではPythonを選択します。そうです、AWKを学ぶべきです。しかし、Pythonも学ぶ:-)

1
wzzrd

Perlはほとんどすべての重要なプラットフォームに移植されているので、価値がないと思います。 sedとawkを一緒に使用するよりも汎用性があります。自動分割については、次のようにPerlで実行できます。

Perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

編集:多少 awkに精通したいかもしれません。他のいくつかのツールはパターンベースのアクション(SolarisのDTraceなど)の哲学に基づいているためです。

0
zvrba

私は、ファイルが列形式であるエリアで働いています。ですから、awkはファイルを再フォーマットしてさまざまなソフトウェアが連携できるようにするために非常に貴重です。 IT以外の専門家にとっては、awkを使用するだけで十分です。今では、コンピューターの速度は問題ではないので、awkとunixを組み合わせて、多くの1ライナーコマンドを「スクリプト」にパイプすることができます。フィールドとレコードによるAwk検索では、「vi」を使用してファイルを開くのではなく、それを使用してファイルデータを非常に高速にチェックします。私はawkの能力が私の仕事に特別な喜びをもたらしたと言わざるを得ません。awkを使って同僚が物事を素早く整理するのを支援できます。私にとってすばらしいコードです。

0
Hai Truong

awkはパワーツール言語なので、何らかのIT専門家であれば、awkがどこかで使用されていることに気付くでしょう。 grepsedの構文と正規表現を処理できる場合は、awkを選択しても問題はないはずです。

awkが本当に輝いているのは、複数行レコードの処理や、複数のファイルを同時にマングル/補間するなどの作業を単純化することです。

0
user4401178

私は最近、20pbs以上のDOS攻撃を記録したネットワークpcapファイルを視覚化しようとしていました。タイムスタンプとIPアドレスが必要でした。私のシナリオでは、[〜#〜] awk [〜#〜] one-linerは途方もなく非常に高速に動作しました。具体的には[〜#〜] awk [〜#〜]を使用して、抽出されたファイルを消去し、グループ化された期間内のIPアドレスからIPアドレスと合計パケット数を取得しました。私は他の人々が上に書いたことに完全に同意します。それはあなたのニーズ次第です。

0
Ayush

私はpythonで現在いくつかのコーディングを行っています。しかし、ファイル変換を簡単に行うために簡単に使用するのに十分な知識がまだありません。

Awkを使用すると、unixコマンドラインで、かなりスウィッシュな変換を行う1行のコードをすばやく開発できます。 awkを使用するたびに、私が書くコードは使い捨てで、数行の長さしかありません。たぶん、「if」文と「printf」文が1行にある場合もあります。

Awkを使用して10行を超えるコードを記述したことはありません。数年前にそのようなスクリプトを見ました。

しかし、多くのコード行を必要とするものはすべて、Pythonに頼ります。

私はawkが大好きです。 sedと組み合わせた非常に強力なツールです。

0
user5901715

Awkを学習しない理由の1つは、正規表現に貪欲でない一致がないことです。

私はawkコードを持っていますが、awk/gawkに欲張りでない一致などはないので、いくつかの正規表現を適切に実行できないということを突然デバッグしたため、書き換える必要があります。

0
user619271

それはあなたのチームメイトとあなたのリーダーとあなたが取り組んでいるタスクに依存します。

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even Java
    }
  }else{
    do as they ask
  }
}
0
Kenneth