2016-07-10 38 views
-1

シェルスクリプトのオンラインレッスンは、私の仕事がシェルスクリプトを習得する必要があるため、行っています。Nawkコマンドの特定の行を理解する

"awk"と "nawk"コマンドが出てきて、私の学習はまだそれに達していません。

簡単に言えば、awk/nawkは特定のパターンを検索し、一致するものが見つかった場合にアクションを実行することを知っています。でも、それにもかかわらず

は、私は次の行がために何を意味するか理解できませんでした:

eval $(cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}") 

は、この行がないか、行うことを目的としているかを理解するために私を助けてください。

+0

最近、 'nawk'は基本的に' awk'だけです。これとは対照的に、 'new awk'という古いawkはめったに遭遇しません(しかし、SolarisやAIXのようないくつかのシステムでは 'oawk'が見つかるかもしれません;その場合、明白ではないか'awk'は' nawk'または 'oawk'です)。 GNU Awkは 'nawk'で指定されていない機能を持っています(しかし' nawk'にはあったが 'oawk'にはなかったものすべてをサポートしています)。これはあなたの質問にはあまり影響しません。 –

+0

このコードでは、[UUoC - 'cat'の無駄な使用](https://stackoverflow.com/questions/11710552/useless-use-of-cat/)を示しています。 –

答えて

1
... awk '/start/,/end/' 

は、開始パターンと終了パターンの間のレコードを印刷します。 {print}は暗示されているため省略することができます。スクリプト内の^は、行の先頭を示します。猫とevalは不要であることを

注、同じことがまた、grepのが同様awkスクリプトに含めることができ

$ awk '...' "${MMORPHYDIR}/${PWFILE}" 

のように記述することができます。

+1

'cat'は不要です。 'grep'はおそらく' awk'が実質的に同じ正規表現をサポートしているのでおそらく不要です。 'eval'が確実ではありませんか? 'cat |の出力を解釈します。 awk | grep'アンサンブルをシェルスクリプトとして使用します。出力に変数設定が含まれている場合、 'eval'はそれらの変数を設定します。あなたの普通のawkはありません。 –

+0

はい、あなたは正しく 'eval'が必要かもしれません。スクリプトから何が出てくるのか分かりませんでした。 – karakfa

1

awk標準、すべてのUNIXライクなシステム上のテキストを操作するための汎用ツールです。 awkにはさまざまな味があり、すべて同じコア機能といくつかの違いがあります。それは LD のawk(Solaris上の例/ binに/ awkは、必要別名古い、壊れたawkのO 1977s の後継として、その約30年前に命名されたため、nawkは非常に残念なN東西awkの命名されましたPOSIXで必要とされる最小限のawk機能(例えば、文字クラス)をサポートしていないため、実際には避けられます。重要な教訓:ソフトウェアエンティティの名前に "new"という単語を使用しないでください!それは、すべてのPOSIX機能に加えて便利な拡張機能のトンをサポートし、一般的に利用可能である、非常によく文書化され、大規模なユーザーベースを持っているよう

、これらの日を使用するのに最適なawkは、awkのgawk NU Gです。

WRT:

eval $(cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}") 

シェルやawkの中で行われてはいけませんダースの事について文字通りやって、完全な混乱です。それを説明しようとすると、ドライバーでコンクリートを混ぜている人を説明しようとするようなものでしょう。あなたはそれを見て去っていくのを忘れてしまった。

awkを学ぶには、Arnold RobbinsのEffective Awk Programming、第4版を読んでください。