1. ホーム
  2. パイソン

[解決済み】Perl、Python、AWK、sedの違いは何ですか?[クローズド]

2022-04-01 09:50:12

質問

それぞれの主な違いは何ですか?また、どのような典型的なシナリオでそれぞれの言語を使うのがよいのでしょうか?

どのように解決するのですか?

登場する言語の順番は sed , awk , perl , python .

sed はストリームエディタで、入力ファイルの各行(またはより一般的には、指定された範囲の行)にスクリプトからのアクションを適用するように設計されています。その言語は ed Unixのエディタである "Container "は、条件分岐などがありますが、複雑な作業はしにくいです。ちょっとした奇跡を起こすことはできますが、その代償は頭髪に及びます。しかし、その範囲内のタスクを実行する場合には、おそらくこのプログラムの中で最も速いでしょう。(今回取り上げたプログラムの中で、最も強力でない正規表現を持っています。多くの目的には十分ですが、PCRE (Perl-Compatible Regular Expressions)ではないことは確かです)。

その awk プログラム(名前は作者であるAho、Weinberger、Kernighanの頭文字から)は、当初はレポートの書式設定のためのツールであった。このプログラムは sed 最近のバージョンでは、計算機的に完全なものとなっています。このプログラムは、「マッチしたパターン」と「パターンにマッチしたときの動作」を基本としている。パターンはかなり強力なものである(拡張正規表現)。アクションのための言語はCに似ている。 awk は、入力を自動的にレコードに分割し、各レコードをフィールドに分割することである。

Perlはawk-killerとsed-killerとして書かれた部分がある。一緒に提供されているプログラムのうち二つは a2ps2p を変換するためのものです。 awk スクリプトと sed スクリプトを Perl に変換します。Perlは次世代のスクリプト言語の中で最も早く登場した言語の一つである(Tcl/Tkがおそらく第一人者であると主張できる)。Perlは次世代スクリプト言語の草分け的存在である。ほとんどすべてのシステムコールにアクセスでき、CPANモジュールの拡張性を備えています。(どちらも awksed は拡張可能です)。Perlのモットーの1つに「TMTOWTDI - There's more than one way to do it"」(発音は「ティムトーディー」)があります。Perlにも「オブジェクト」はありますが、言語の基本的な部分というよりは、アドオンのようなものです。

Pythonは最後に書かれたもので、おそらくPerlへの反動もあったのでしょう。Pythonには面白い構文のアイデアがあります(レベルを示すインデント-中括弧や同等のものはない)。PythonはPerlよりも基本的にオブジェクト指向ですが、Perlと同じように拡張可能です。

OK - それぞれをどのような場面で使うか?

  • Sed - ファイルに対して単純なテキスト変換を行う必要がある場合。
  • Awk - データの簡単な書式設定や要約、変換だけが必要な場合。
  • Perl - ほぼすべてのタスクに対応。特に複雑な正規表現が必要なタスクに適しています。
  • Python - Perlと同じようなタスクに使用できます。

PerlにできてPythonにできないことはありませんし、その逆もまた然りです。2つのうちどちらを選ぶかは、他の要素に依存すると思います。私はPythonができる前にPerlを学んだので、Perlを使うことが多いですね。Pythonは構文が複雑でなく、一般的に学ぶのが簡単です。Perl 6が利用可能になれば、魅力的な展開になるでしょうね。

(特にPerlとPythonの「概要」は非常に不完全で、このテーマで一冊の本が書けるほどです)。