- awkとsedはどう違いますか?
- sedおよびawkツールの最適な使用例はどのようなアプリケーションですか?
回答:
sed
ストリームエディタです。行単位で文字のストリームを処理します。(パターンマッチングとアドレスマッチングに加えて)gotoスタイルのループと単純な条件文を含むプリミティブプログラミング言語があります。基本的に「変数」は2つしかありません。パターンスペースとホールドスペースです。スクリプトの可読性は難しい場合があります。数学的演算は、せいぜい非常に扱いにくいです。
sed
コマンドラインオプションと言語機能のサポートレベルが異なるのさまざまなバージョンがあります。
awk
行単位で区切られたフィールドを対象としています。それは含めてはるかに堅牢プログラミング構成ありif
/ else
、while
、do
/ while
およびfor
(C-スタイルと配列の反復を)。変数と1次元の連想配列に加えて、(IMO)厄介な多次元配列が完全にサポートされています。数学演算はCのものに似ていprintf
ます。「A WK」の「K」は、「Cプログラミング言語」の名声の「Kernighan and Ritchie」(A hoとW einberger を忘れないでください)のように、「K ernighan」を表します。を使用して、アカデミック盗用の検出器を書くことができawk
ます。
GNU awk
(gawk
)には、最新バージョンの真の多次元配列を含む多数の拡張機能があります。およびをawk
含む他のバリエーションがmawk
ありnawk
ます。
どちらのプログラムも、テキストの選択と処理に正規表現を使用します。
sed
テキストにパターンがあるところを使用する傾向があります。たとえば、「マイナス記号の後に一連の数字が続く」形式のテキスト(たとえば「-231.45」)の一部のテキストのすべての負の数値を「会計士の角かっこ」形式(たとえば「(231.45)」に置き換えることができます。 )これを使用する(改善の余地があります):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
awk
テキストが行と列のように見える場合、またはawk
それらを「レコード」と「フィールド」と呼ぶ場合に使用します。上記と同様の操作を行う場合は、単純なコンマ区切りファイルの3番目のフィールドでのみ、次のようにします。
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
もちろん、これらは非常に単純な例であり、それぞれが提供する必要のあるすべての機能を示しているわけではありません。
sed
:sed.sourceforge.net/#scriptsを
1)awkとsedの違いは何ですか?
どちらもテキストを変換するツールです。しかし、awkはテキストを操作するだけでなく、他のこともできます。配列、ループ、if / elseフロー制御など、プログラミングで習得するほとんどの機能を備えたプログラミング言語自体もsedで「プログラミング」できますが、その中に記述されたコードを維持したくありません。
2)sedおよびawkツールの最適な使用例はどのようなアプリケーションですか?
結論:非常に単純なテキスト解析にはsedを使用します。それ以上のものは、awkの方が優れています。実際、sedを完全に破棄して、awkを使用することができます。それらの機能は重複していて、awkはさらに多くのことができるので、awkを使用してください。学習曲線も減少します。
sed
、's/search/replace'
より入力する方法が容易であるawk
の構文とあなたはほとんどの時間を必要とするものです。