私は常に問題の正しい解決策を使用したいので、古いツールを含め、新しいツールを常に学習しています。
それでも、それらのいくつかを学ぶ理由はまだあるのだろうか。awkたとえば、私には興味深いですが、単純なテキスト処理の場合は、、、、などを使用できますがgrep、複雑なテキスト処理の場合はcut、sedPythonを使用します。
だからといって、それが強力で便利なツールではないという意味ではありません。しかし、新しいツールを学ぶには時間と労力がかかるので、それだけの価値はありますか?
私は常に問題の正しい解決策を使用したいので、古いツールを含め、新しいツールを常に学習しています。
それでも、それらのいくつかを学ぶ理由はまだあるのだろうか。awkたとえば、私には興味深いですが、単純なテキスト処理の場合は、、、、などを使用できますがgrep、複雑なテキスト処理の場合はcut、sedPythonを使用します。
だからといって、それが強力で便利なツールではないという意味ではありません。しかし、新しいツールを学ぶには時間と労力がかかるので、それだけの価値はありますか?
回答:
自分がいる環境に依存すると思います。* nixの人なら、知ることawkは良いことです。ほぼすべての* nixにある他の唯一のスクリプト環境はshです。したがってgrep、sed,などは確かにawk現代の主流のlinuxディストリビューションに取って代わることができますが、よりエキゾチックなシステムに移行すると、少し知っているawkことは本当の意味で便利です。
awkテキスト処理以外にも使用できます。たとえば、私の監督者の一人が天文学のコードを書いていますawk-それは彼がどれほど完全に古い学校で素晴らしいかです。彼の時代には、それは仕事に最適なツールでした...そして今、私のような彼の生徒たちはpythonを使っていますが、そうでない場合でも、彼は自分が知っていることとうまく機能することにこだわっています。
締めくくりに、世界中にキックしている古いコードがたくさんありますawk。それはまたあなたをより良くします* nix人:-)
awkの基本をすぐに習得すれば、コマンドラインで実際に素晴らしいことを行うことができます。
しかし、awkを学ぶ本当の理由は、作者のAho、Kernighan、およびWeinbergerによるすばらしい本The AWK Programming Languageを読む口実を持つことです。名前から、それは単にあなたにawkを教えると思うでしょう。実際、それはほんの始まりにすぎません。文字列の操作を簡単にする簡潔なスクリプト言語を使用することで対処できるさまざまな問題に乗り出し、awkは最初の1つでした。データベース、パーサー、インタープリターの実装方法を読者に教え始めました。 、そして(メモリが私に役立つなら)小さなプロジェクト固有のコンピュータ言語用のコンパイラ!彼らがawkを使用してサンプルのオペレーティングシステムもプログラミングしていれば、この本はコンピュータサイエンスのかなり完全な調査の紹介になったでしょう。
元のC言語の本のように、非常に明快で簡潔なことも、親しみやすいテクニカルライティングが正しく行われた素晴らしい例です。インデックスも職人技の一部です。
あれ?わかっている場合は、コマンドラインで時々使用しますが、それよりも大きいと、Pythonのようなものが提供するシステムやインターネットのより広い機能にアクセスできず、閉じ込められているように感じます。しかし、本?あなたはいつもそれを読んでうれしいです!
私が使用する唯一の理由awkは自動分割です:
awk '{print $3}' < file.in
これにより、3つ目の空白区切りフィールドがに出力されfile.inます。それは少し簡単です:
tr -s ' ' < file.in | cut -d' ' -f3
              awk '{print $3}' < file.in代わりになぜ使用するのawk '{print $3}' file.inですか?引数として渡されたとき、awkはすでにファイルを読み取っていませんか?
                    awk:/
                    ファイルに列/フィールドが含まれている場合、awkはすばらしいと思います。複数列ファイルの特定の列を処理/分析するときに使用します。または、特定の列を追加/削除したい場合。
例えば
awk -F \t '{ if ($2 > $3) print; }' <filename>
タブ区切りファイルの2列目の値が3列目の値より大きい場合にのみ印刷されます。
もちろん、PerlやPythonを使用することもできますが、awkを使用すると、簡潔な1行のコマンドで非常に簡単になります。
また、awkの学習はかなり低コストです。awkの基本を1時間未満で習得できるので、他のプログラミング/スクリプト言語を習得するほどの労力は必要ありません。
HTMLの処理にAWKを使用することがあります。たとえば、次のコードはテーブルをcsvファイルに変換します。
BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }
これは、画面をこする場合に最適です。実際、私がAWKを気に入っているのは、問題に対する間違った解決策をすばやく作成できるためです。ジョン・ベントレーの素敵なプログラミング真珠にも言及されています。
この質問をしてから6年後、私は確実に答えることができるようになりました。いいえ、awkを学ぶことは価値がありません。
基本的なタスクは処理されますが、基本的なbashコマンド、またはGUIツールでさえ簡単です。より複雑なタスクは、Python(favまたはmine)やRubyなどの最新の動的言語で簡単に取り組むことができます。
非常に多くのタスク(Web、管理、データ処理、自動化など)に役立つので、mordernスクリプト動的言語を確実に学ぶ必要があります。そして、そうすることにより、awkなどのツールを完全に役に立たないことを学ぶことで、毎月数秒で最大で数秒節約できます。
すでにsedを知っていて使用している場合は、少なくとも少しawkを取得することもできます。それらは、いくつかのかなり強力なトリックのために一緒にパイプすることができます。常に聴衆を感動させます。
もちろん、私は使用可能な言語が次の環境で作業しています:(COBOL、OMG、OMGを生成する一部のshity言語)、bash(古いバージョン)、perl(まだマスターしていません)、sed、awk 、および他のいくつかのコマンドラインユーティリティ。知るawkことで私は数時間節約できました(そして私の同僚からいくつかのテキスト処理タスクが生成されました-それらは少なくとも1日に3回私にやって来ました)。
もう価値がないと思う。私は時々それを検索機能が含まれているsedよりもはるかに用途の広いストリームエディターとして使用しますが、Pythonに習熟している場合、必要な時間を補うためにはるかに速く完了することができるタスクを知りませんawkを学ぶ。
次のコマンドは、おそらく過去2年間にawkを使用した唯一のコマンドです(Debian / Ubuntuシステムから半分削除されたパッケージを削除します)。
$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P
              awkはpowertool言語なのでawk、何らかのITプロフェッショナルであれば、どこかで使用されていることに気付くでしょう。あなたはの構文や正規表現を扱うことができる場合grepとsed、あなたは何の問題拾いを持つべきではないawk、それはおそらくに価値があります。  
私がawk本当に優れているのは、複数行のレコードの処理や複数のファイルの同時処理/内挿などの処理を簡素化することです。
私は、ファイルが列形式の領域で作業します。したがって、awkは、異なるソフトウェアが連携して動作できるようにファイルを再フォーマットするために私にとって非常に貴重です。非ITの専門家にとって、awkの使用は十分で完璧です。今日、コンピューターの速度は問題ではないので、awkとunixを組み合わせて、多くの1ライナーコマンドを「スクリプト」にパイプすることができます。フィールドとレコードによるAwk検索では、「vi」を使用してファイルを開く代わりに、ファイルデータを非常に高速にチェックするために使用します。特にawk機能は私の仕事に喜びをもたらしたと言わざるを得ません。awkを使用すると、同僚が素早く物事を整理できるように支援することができます。すばらしいコード。
私は最近、20Gbsを超えるDOS攻撃を記録するネットワークpcapファイルを視覚化しようと試みていました。タイムスタンプとIPアドレスが必要でした。私のシナリオでは、AWKのワンライナーは非常に高速に動作しました。私は特にAWKを使用して、抽出されたファイルをクリーンアップし、グループ化された期間内のIPアドレスとそれらのIPアドレスからの合計パケット数を取得しました。私は他の人が上に書いたものに完全に同意します。それはあなたのニーズに依存します。
awkを学習しない理由の1つは、正規表現に貪欲でない一致がないことです。
私はawk / gawkに貪欲でない一致などのものがなく、一部の正規表現を適切に実行できないことを突然デバッグしたために、今すぐ書き直さなければならないawkコードがあります。
現在、Pythonでコーディングを行っています。しかし、私はまだ、それが単純な1回限りのファイル変換に簡単に使用できるほどよくわかりません。
awkを使用すると、UNIXコマンドラインで1行のコードをすばやく開発できます。私がawkを使用するたびに、私が書くコードは使い捨てになり、数行以内になります。多分「if」ステートメントと「printf」ステートメントは、ここかそこの1行にあります。
awkを使用して10行を超えるコードを記述したことはありません。私は数年前にそのようなスクリプトをいくつか見ました。
しかし、何行ものコードが必要な場合は、Pythonを使用します。
私はawkが大好きです。これは、sedと組み合わせると非常に強力なツールです。