awk、mawk、nawk、gawk…何?


37

私はawkを学び始めたばかりで、周りのこれらすべてのバージョンについて少し混乱しています。すべてのUnixライクシステムで見られる「バージョン」はありますか?たとえば、ご存知のとおり、vi 標準のawkは-Fオプションをサポートしていますか?

回答:


37

awk-最も一般的で、ほとんどのUnixライクなシステムで見られます。最も古いバージョンで、新しいバージョンより劣っています。

mawk-バイトベースのインタープリターに基づいたコードベースの高速AWK実装。

nawk -AWK言語の開発中に、著者は混乱を避けるために新しいバージョンをリリースしました(そのためn - n ew awk)。AWKのPython 3.0のように考えてください。

gawk -GNU awkの略。開発者がi18nサポートを追加しようとした唯一のバージョン。ユーザーが独自のC共有ライブラリを作成して、独自の「プラグイン」で拡張できるようにしました。このバージョンはLinuxの標準実装であり、元のAWKはUnix v7用に作成されました。

jawk(java実装)、bwk(Brian W. Kernighanの実装)などのような他のバージョンがあります。


3
オリジナルのawkは、私が利用できるUnixライクなシステムには存在しません。多くの場合、/usr/bin/awknawk、またはgawk、またはBusyBox awk(動作はgawkと同様)を実行します。
-dubiousjim

10
2012年後半の時点で、Ubuntu / Debianシステムはデフォルトでmawkをインストールします。コマンドラインfile /etc/alternatives/awkが返されるsymbolic link to /usr/bin/mawk
マイクシェリル 'キャットリコール'

MAWKは真の多次元配列などのすべてのGAWK機能を備えていますか?
WYSIWYG

2
@JordonBedwellうん..があります:正規表現の繰り返しはmawkでは不可能です。また、多次元配列もサポートしていません。
WYSIWYG

1
@dubiousjim Ubuntuには、universeリポジトリにoriginal-awkがあります。
ジャルノ

6

あなただけを使用することができますawk。POSIXで定義されているため、すべてのPOSIX準拠システムに存在する必要があります。

-Fパラメータがされていることにより、義務付けにも。


1
...しかし、他のバージョンとの互換性を保証するために何を使用できるかを伝えるために、標準を確認するよう注意してください。例えば、使用のために、ではないですかgensub()、とテストawk> - gawk...、そしてあなたに行くにしている良いと思う
dmckee

1
@dmckeeを使用gawk --posixすると、POSIX標準に従ってgawkを動作させることができます。また、スクリプトが標準に従っていることを確認します。awk --posix '' 2>/dev/nullUbuntuで、awkとしてgawk、mawk、original-awkが使用されている場合でも使用できますが、posix-optionはgawkによってのみ認識されます。--posixはoriginal-awkの最後のオプションでなければなりません。awk -W posix ''gawkとmawkで使用できます。
ジャルノ

1
@ dmckee、mawk --posix ''mawk 1.3.3を使用すると失敗しますが、mawk 1.3.4を使用するとエラーメッセージが表示されて成功します
-jarno

1

awkちょうど約すべての* NIXベースのシステムが、それは、それは単にどのように似て異なるバージョンにシンボリックリンクされます完全に可能だとして、それがサポートは若干シフトするものの正確な仕様になり/bin/sh、多くの場合、多くの場合、特定のシェルにリンクされているbashか、1のその派生物。(記録のために、viシンボリックリンクさvimれているマシンもたくさん知っています。)


常にシンボリックリンクされる必要はありません。時にはハードリンクされています。
-dubiousjim

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.