sed と awk の違いは何ですか? [closed] 質問する

sed と awk の違いは何ですか? [closed] 質問する
  • awk と sed の違いは何ですか?
  • sed および awk ツールに最適な使用例はどのようなアプリケーションですか?

ベストアンサー1

sedはストリーム エディタです。文字のストリームを行単位で処理します。goto スタイルのループや単純な条件文 (パターン マッチングやアドレス マッチングに加えて) を含む基本的なプログラミング言語を備えています。基本的に、パターン スペースとホールド スペースの 2 つの「変数」しかありません。スクリプトの可読性は難しい場合があります。数学的演算は、せいぜい非常に扱いにくいものです。

sedには、コマンド ライン オプションと言語機能のサポート レベルが異なるさまざまなバージョンがあります。

awkは、行ごとに区切られたフィールドを対象としています。if/ elsewhiledo/ whilefor(C スタイルと配列の反復) など、より堅牢なプログラミング構造を備えています。変数と 1 次元の連想配列、および (私見ですが) 場違いな多次元配列が完全にサポートされています。数学演算は C の演算に似ています。printfと 関数があります。「AWK」の「K」は、「C プログラミング言語」で有名な「Kernighan と Ritchie」の「Kernighan」の略です (Aho と Weinberger も忘れてはなりません) 使用して学術的な盗作を検出するツールを書くことも可能でしょうawk

GNU awk( gawk) には多数の拡張機能があり、最新バージョンでは真の多次元配列がサポートされています。やawkを含む他のバリエーションもあります。mawknawk

どちらのプログラムも、テキストの選択と処理に正規表現を使用します。

私は、テキストにパターンがあるところでは、これを使用する傾向があります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

もちろん、これらは非常に単純な例であり、それぞれが提供する機能の全範囲を説明しているわけではありません。

おすすめ記事