116

私は問題に対して適切な解決策を使用するのが好きなので、昔ながらのツールでさえ、常に新しいツールを学んでいます。

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

だからといって、それが強力で便利なツールではないという意味ではありません。しかし、新しいツールを学ぶには時間とエネルギーがかかるので、それだけの価値はありますか?

4

24 に答える 24

113

awkの基本をすぐに習得すれば、コマンドラインで驚くべきことを実行できます。

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

オリジナルのC言語の本のように、有名に明確で簡潔であり、それはまた、正しく行われたフレンドリーなテクニカルライティングの素晴らしい例です。インデックスでさえ職人技の一部です。

わあ?あなたがそれを知っているなら、あなたは時々コマンドラインでそれを使うでしょう、しかしそれより大きなもののためにあなたは閉じ込められたと感じ、Pythonのようなものがアクセスを提供するあなたのシステムとインターネットのより広い機能にアクセスすることができません。しかし、本?あなたはいつもそれを読んでうれしいでしょう!

于 2009-03-31T21:38:15.710 に答える
102

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

awkテキスト処理以外にも使用できます。たとえば、私の監督者の1人が天文学のコードを書いていますawk-それは彼がどれほど古い学校素晴らしいかです。当時、それは仕事に最適なツールでした...そして今では私のような彼の学生はPythonを使用していますが、そうではありませんが、彼は自分が知っていることとうまく機能していることに固執しています。

最後に、世界中で多くの古いコードがキックされていますが、少しでもawk問題がないことを知っています。それはまたあなたをより良くするでしょう*nix人:-)

于 2008-09-20T08:31:51.387 に答える
30

私が使用する唯一の理由awkは自動分割です:

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

これにより、の3番目の空白区切りフィールドが出力されfile.inます。それは少し簡単です:

tr -s ' ' < file.in | cut -d' ' -f3
于 2008-09-20T08:28:14.173 に答える
25

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

例えば

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

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

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

また、 awk の学習はかなり低コストです。awk の基本は 1 時間もかからずに習得できるため、他のプログラミング言語やスクリプト言語を習得するほどの労力は必要ありません。

于 2008-09-20T08:44:03.917 に答える
9

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

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

あなたがスクリーンスクレイピングをしているなら、これは素晴らしいことです. 実際、私は AWK が大好きなのかもしれません。なぜなら、問題に対する間違った解決策を非常に迅速に構築できるからです :)より多くの例. Jon Bentley の素敵なProgramming Pearlsでも言及されています。

于 2008-11-08T22:03:12.797 に答える
7

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

于 2008-11-14T10:33:14.523 に答える
7

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

かなりの時間を費やすことはお勧めしませんが、構文の基本を知っておくと便利な場合があります。少なくとも、使用したい場合にマニュアルをすばやく参照できる程度です。

于 2008-09-20T08:26:41.257 に答える
5

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

于 2008-09-20T08:32:24.020 に答える
5

ほとんどの awk ワン ライナーは、Perl ワン ライナーで実現できます (Perl ワン ライナーの考え方を選択した場合)。または、Perl の 3 つのライナーを使用してください :)

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

実用的な必要がなくても、正規表現を知っていれば基本を理解するのにそれほど時間はかかりません。かなりエレガントです。

于 2008-09-20T09:09:27.833 に答える
4

Computerworld は最近、Alfred V. Aho (AWK の 3 人の作成者の 1 人) に AWK についてのインタビューを行いました。なかなか面白い読み物です。その中に、なぜ AWK を学ぶのが良いのかというヒントが見つかるかもしれません。

于 2008-09-26T11:14:31.773 に答える
2

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

于 2008-09-26T10:40:53.040 に答える
2

これは主に、シェル スクリプトの実行中にログ ファイルのデータやプログラムの出力を解析する必要がある場合に役立ちます。これは、awk では非常に簡単に実現できるため、Python ではコード行数が少し増えるからです。

それは確かにそれよりも強力ですが、これはほとんどの人がそれを使用するタスクのようです.

于 2008-09-20T08:32:58.187 に答える
1

おそらくもう価値がないと思います。私は時々それを検索機能が含まれているsedよりもはるかに用途の広いストリームエディタとして使用しますが、Pythonに精通している場合は、必要な時間を補うためにはるかに速く完了することができるタスクを知りませんawkを学ぶために。

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

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P
于 2008-09-20T08:28:16.700 に答える
1

いいえ。

面白いかもしれませんが、Perlなどの他のより強力なツールを使用してawkが実行できるすべてのことを実行できます。

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

于 2008-09-20T08:31:50.293 に答える
1

あると思います。単純なものの場合、AWKはPythonよりも経験の浅いシステム管理者/開発者にとってはるかに簡単です。あなたは少しのAWKを学び、多くのことをすることができます。Pythonを学ぶことは、まったく新しい言語を学ぶことを意味します(そうです、AWKは言語でもあることを私は知っています)。

PerlはAWKができる多くのことを行うことができるかもしれませんが、私がここでPythonを選択するこの時代に選択肢を提供しました。そうです、AWKを学ぶ必要があります。しかし、Pythonも学びましょう:-)

于 2008-11-12T16:49:14.787 に答える
1

私は最近、20Gbs を超える DOS 攻撃をログに記録するネットワーク pcap ファイルを視覚化しようとしていました。タイムスタンプと IP アドレスが必要でした。私のシナリオでは、AWKワンライナーも非常に高速に機能しました。特にAWKを使用して、抽出されたファイルをクリーンアップし、グループ化された期間内にそれらのIPアドレスからIPアドレスと合計パケット数を取得しました. 他の人が上に書いたことに完全に同意します。それはあなたのニーズに依存します。

于 2014-08-20T21:13:58.297 に答える
1

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

awk/gawk に非貪欲な一致などがないことを突然デバッグしたため、書き換える必要がある awk コードがあり、一部の正規表現を適切に実行できません。

于 2017-07-17T06:45:46.513 に答える
1

awkはパワーツール言語であるため、awk何らかの IT プロフェッショナルであれば、どこかで使用されていることに気付くでしょう。and の構文と正規表現を処理できる場合は、問題なく使用できるはずでgrepあり、おそらく使用する価値があります。 sedawk

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

于 2015-08-03T23:31:57.930 に答える
0

現在、PERL はほぼすべての重要なプラットフォームに移植されているため、それだけの価値はないと思います。sed と awk を一緒に使用するよりも汎用性があります。自動分割に関しては、次のように perl で実行できます。

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

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

于 2008-09-26T11:24:57.097 に答える
0

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

于 2014-04-26T02:59:15.267 に答える