私はApple MacOとUbuntuの間で移植する必要があるスクリプトを書いています。前者の「awk」はnawkによって提供され、後者はgawkによって提供されるものです。実装間には大きな違いがあります。
特に私はUbuntu 22.04LTSで開発していますが、残念ながら...
# apt install nawk
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package nawk
(Debian Bullseyeでも同じ)
また、nawkソースコードをダウンロードしてコンパイルしてみましたが、私のディストリビューションではyaccを使用できず、Bisonはmakefileを実行するのと同じくらい互換性がありません。
ぼやけさせる方法がありますか?パフォーマンス錆のような?
失敗した場合、リポジトリから情報を取得できるLinuxディストリビューションはありますか?
ベストアンサー1
nawk
はい、リポジトリには1つ以上のリリースがあります。私はたくさんあると確信していますが、私のArchシステムでこの記事を書いており、Archに次のものがあることを確認できますnawk
。
$ pacman -Ss nawk
community/nawk 20220912-1 [installed]
The one, true implementation of AWK
つまり、ここで役に立つトリックはbusyboxを使用することですawk
。忙しい箱さまざまな標準ツールの簡素化されたバージョンを提供する組み込みシステムで非常に便利で一般的な優れたツールです。
BusyBoxは、多くの一般的なUNIXユーティリティの小さなバージョンを小さな実行可能ファイルに結合します。通常、GNU fileutils、shellutilsなどで見つけることができるほとんどのユーティリティを置き換えます。 BusyBoxのユーティリティは、一般的にフル機能のGNUユーティリティよりもオプションが少ないです。ただし、含まれているオプションは期待される機能を提供し、GNUユーティリティと非常によく似ています。 BusyBoxは、小規模システムや組み込みシステムに非常に完全な環境を提供します。
それが提供するツールの1つはUbuntu()にインストールされているawk
場合は最小限です。busybox
sudo apt install busybox
busybox awk
awk
いいえ nawk
awk
しかし、これはより良いパフォーマンスを提供する必要があるシンプルでシンプルなバージョンですgawk
。スクリプトがbusyboxで動作している場合は、busyboxawk
でも動作する可能性が高くなります。これは完璧な解決策ではありません。私は見つけました。gawk
nawk
コメントサイトのもう一つの答えは「実際、BusyBoxはv3awk
と非常によく似ています。gawk
nawk
しかし、これは始まりに過ぎません。
最後に、おそらく最も関連性の高いgawk
ものは実際に--posix
オプション:
-血
--posix
厳格なPOSIXモードで動作します。これは --traditional と同様に、すべての gawk 拡張を無効にし、POSIX で許可されていないすべての拡張を無効にします。バラより一般的に使用される拡張機能の概要このオプションで無効にされた gawk の拡張機能の概要です。また、次の追加制限が適用されます。
「?」後には改行文字や「:」は使用できません(参照)。条件式)。コマンドラインに「-Ft」を指定すると、FS値は単一のタブに設定されません(参照:フィールドの区切り方法の指定)。ロケールの小数点文字は入力データを解析するために使用されます(参照あなたの場所はさまざまです)。
コマンドラインに--traditionalと--posixの両方を提供する場合、--posixが優先されます。 gawk は、両方のオプションが提供された場合に警告を出します。
したがって、最良の方法は、gawk --posix
テスト中に移植可能な機能のみが使用されることを確認することです。
またはそうでないかもしれません。エドモートン私たちの常駐awkの専門家の一人が、現在削除されているコメントで次のように語っています。
gawk --posix
ポータブル機能のみを使用する保証はありません。たとえば、このオプションセットを使用すると、文字列内のすべての文字がsplit("foo",arr,"")
埋められますが、他のawkは文字列全体の個々の項目を埋めたり、別の操作を実行したり、空の文字列を区切り文字として使用したりすることはできません。 POSIXと互換性があります。アクション。 gawk拡張をオフにすることはすべてですが、POSIXで定義されていない動作に対してgawk実装に依存するコードを書くには、手動管理が必要です。 ——エドモートンarr[]
"foo"
arr[]
"foo"
--posix
Edは私よりもawkについてもっと知っているので、彼の言葉を受け入れます。