質問

私は問題に対して適切な解決策を使用したいので、古いツールであっても常に新しいツールを学んでいます。

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

ここで言いたいのは、これが強力で便利なツールではないということではありません。しかし、新しいツールを習得するには時間と労力がかかるため、 その価値はありますか ?

役に立ちましたか?

解決

それは自分が置かれている環境によると思います。あなたが *nix の人なら、知っているはずです awk それは良いことです。事実上すべての *nix で見つかる唯一のスクリプト環境は次のとおりです。 sh. 。それで、その間 grep, sed, などは確実に交換できます awk 現代の主流で linux ディストリビューション、よりエキゾチックなシステムに移行するとき、少し知っておくと awk 本当に便利になるでしょう。

awk テキスト処理以外にも使用できます。たとえば、私の上司の 1 人は、次のような天文学コードを作成しています。 awk - それはまったくのことです 古い学校 そして 素晴らしい 彼は。彼の時代には、それが仕事に最適なツールでした...そして今では、私のような彼の生徒が Python などを使用しているにもかかわらず、彼は自分の知っていることに固執し、うまく機能します。

最後に、少しは知っているものの、世界中で古いコードがたくさん使われています。 awk 傷つかないよ。それはあなたをさらに良くするでしょう *nix の人:-)

他のヒント

awk の基本をすぐに学べば、確かにコマンドラインで驚くべきことを実行できるようになります。

しかし 本物 awk を学ぶ理由は、 素晴らしいですAWK プログラミング言語 著者のアホ、カーニハン、ワインバーガーによる。名前からすると、単に怖さを教えてくれるだけだと思う​​かもしれません。実際、それはほんの始まりにすぎません。文字列の操作を容易にする簡潔なスクリプト言語を使用すると、取り組むことができる膨大な問題に着手し、awk は最初の言語の 1 つであり、データベース、パーサー、インタープリターの実装方法を読者に教えます。 、そして (記憶があれば) 小さなプロジェクト固有のコンピューター言語用のコンパイラーです。彼らが awk を使用してオペレーティング システムの例をプログラムしていれば、この本はコンピューター サイエンスへのかなり完全な調査入門になっていたでしょう。

オリジナルの C 言語の本と同様に、明瞭かつ簡潔であることで有名ですが、この本は、適切に行われたフレンドリーな技術文書の素晴らしい例でもあります。インデックスにも職人技が光ります。

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

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

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

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

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

ファイルに次の内容が含まれている場合、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 を愛しているのは、問題に対する間違った解決策を素早く構築できるからかもしれません :) 他の例. 。ジョン・ベントリーの『素敵』でも言及されています。 プログラミングパール.

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

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

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

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

実用的な必要がなくても、正規表現をすでに知っていれば、基本を習得するのにそれほど時間はかかりません。また、当時のものがどのように設計されていたかを知るのは楽しいです。かなりエレガントです。

すでに sed を知っていて使用している場合は、少なくとも awk を少しだけ覚えておくとよいでしょう。これらをパイプで接続すると、非常に強力なトリックを実現できます。常に観客に感動を与えます。

この質問をしてから 6 年が経った今、私は確信を持って答えることができます。いいえ、awk を学ぶ価値はありません。

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

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

Computerworld は最近、 インタビュー アルフレッド V とAho (AWK の 3 人の作成者の 1 人) が AWK について説明します。なかなか興味深い読み物です。この中に、AWK を学ぶことがなぜ良いのかについてのヒントが見つかるかもしれません。

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

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

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

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

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

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

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

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

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

いいえ。

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

これらのより強力なツールの学習に時間を費やしてください。その過程で偶然に awk を入手するだけにしてください。

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

Perl は AWK でできることの多くを実行できるかもしれませんが、この時代では選択肢として Python を選択します。そうです、AWK を学ぶべきです。でもPythonも勉強してください:-)

現在、PERL はほぼすべての重要なプラットフォームに移植されていますが、それだけの価値はないと私は思います。sed と awk を併用するよりも汎用性が高くなります。自動分割については、Perl で次のように行うことができます。

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

編集:まだ手に入れたいかもしれません 幾分 他のいくつかのツールはパターンベースのアクションの哲学に基づいているため、awk についてはよく知られています (例:Solaris 上の DTrace)。

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

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

awk はパワーツール言語なので、おそらく見つけられるでしょう awk あなたが何らかの IT プロフェッショナルであれば、どこかで使用されているはずです。次の構文と正規表現を扱える場合 grep そして sed そうすれば問題なく拾えるはずです awk そしておそらくそうする価値があるでしょう。

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

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

awk コードがありますが、書き直す必要があるのは、awk/gawk に非貪欲一致のようなものがないため、一部の正規表現を適切に実行できないことが突然デバッグされたためだけです。

それはチームメイトやリーダー、そして取り組んでいるタスクによって異なります。

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
  }
}

私は現在Pythonでコーディングを行っています。しかし、私はまだ、単純な 1 回限りのファイル変換に簡単に使用できるほどよくわかっていません。

awk を使用すると、Unix コマンド ラインで非常に素晴らしい変換を行う 1 行のコードをすばやく開発できます。awk を使用するたびに、私が作成するコードは使い捨てであり、長さは数行以内になります。おそらく、1 行のあちこちに「if」ステートメントと「printf」ステートメントが含まれている可能性があります。

私は awk で 10 行を超えるコードを書いたことがありません。私は何年も前にそのようなスクリプトをいくつか見ました。

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

私はアウクが大好きです。sed と組み合わせると非常に強力なツールになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top