- awk と sed の違いは何ですか?
- sed および awk ツールに最適な使用例はどのようなアプリケーションですか?
ベストアンサー1
sed
はストリーム エディタです。文字のストリームを行単位で処理します。goto スタイルのループや単純な条件文 (パターン マッチングやアドレス マッチングに加えて) を含む基本的なプログラミング言語を備えています。基本的に、パターン スペースとホールド スペースの 2 つの「変数」しかありません。スクリプトの可読性は難しい場合があります。数学的演算は、せいぜい非常に扱いにくいものです。
sed
には、コマンド ライン オプションと言語機能のサポート レベルが異なるさまざまなバージョンがあります。
awk
は、行ごとに区切られたフィールドを対象としています。if
/ else
、while
、do
/ while
、for
(C スタイルと配列の反復) など、より堅牢なプログラミング構造を備えています。変数と 1 次元の連想配列、および (私見ですが) 場違いな多次元配列が完全にサポートされています。数学演算は C の演算に似ています。printf
と 関数があります。「AWK」の「K」は、「C プログラミング言語」で有名な「Kernighan と Ritchie」の「Kernighan」の略です (Aho と Weinberger も忘れてはなりません) 。を使用して学術的な盗作を検出するツールを書くことも可能でしょう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
もちろん、これらは非常に単純な例であり、それぞれが提供する機能の全範囲を説明しているわけではありません。