sedとawkの違いは何ですか?[閉まっている]


497
  • awkとsedはどう違いますか?
  • sedおよびawkツールの最適な使用例はどのようなアプリケーションですか?


回答:


549

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

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

awk行単位で区切られたフィールドを対象としています。それは含めてはるかに堅牢プログラミング構成ありif/ elsewhiledo/ whileおよびfor(C-スタイルと配列の反復を)。変数と1次元の連想配列に加えて、(IMO)厄介な多次元配列が完全にサポートされています。数学演算はCのものに似ていprintfます。「A WK」の「K」は、「Cプログラミング言語」の名声の「Kernighan and Ritchie」(A hoとW einberger を忘れないでください)のように、「K ernighan」を表します。を使用して、アカデミック盗用の検出器を書くことができawkます。

GNU awkgawk)には、最新バージョンの真の多次元配列を含む多数の拡張機能があります。およびを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

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


7
境界をプッシュするいくつかの例を参照するにはsedsed.sourceforge.net/#scriptsを
追って通知があるまで一時停止しました。

@DennisWilliamson-awkだけを学ぶと、不利になるのでしょうか?awkはsedよりもはるかに一般的に使用されていますか?
Steam

4
@blasto:私は、両方を学ぶことをお勧めしますが、awkに重点を置いています。正規表現の多くは両方(および他のツールと言語)に適用されます。より単純なものにはsedを使用し、複雑なものは避けてください。ループと分岐をsedで実行できるのは本当にすばらしいことですが、結果として得られるコマンドラインは複雑で読みにくいものです。あなたの質問への答えは本当にあなたが何をしているかに依存します。
追って通知があるまで一時停止。

@DennisWilliamson-ETL開発者にとって最も役立つものは何ですか?ETLまたはExtract Transform and Loadは、データウェアハウジングの用語です。大雑把に言うと、このジョブには、さまざまな異なるソース(DB、Excelファイル、CSVファイルなど)からのデータの抽出、同じデータの変換、および分析のためのデータウェアハウス(DW)へのロード、データ内のパターンの検出、または単なる履歴が含まれます。記録。例えば。DWの最終用途-過去10年間のデータを持つ食料品店のDWにアルゴリズムを適用すると、リンゴを購入する傾向がある人々がオレンジや類似のものも購入することが明らかになる場合があります。
Steam

1
これをMacで偶然見つけた人のための参考までに、最初のsedの例として「sed -E 's /-([0-9] +。[0-9] *)/(\ 1)/ g'」を試してください。
ダニエルシュミット

124

1)awkとsedの違いは何ですか?

どちらもテキストを変換するツールです。しかし、awkはテキストを操作するだけでなく、他のこともできます。配列、ループ、if / elseフロー制御など、プログラミングで習得するほとんどの機能を備えたプログラミング言語自体もsedで「プログラミング」できますが、その中に記述されたコードを維持したくありません。

2)sedおよびawkツールの最適な使用例はどのようなアプリケーションですか?

結論:非常に単純なテキスト解析にはsedを使用します。それ以上のものは、awkの方が優れています。実際、sedを完全に破棄して、awkを使用することができます。それらの機能は重複していて、awkはさらに多くのことができるので、awkを使用してください。学習曲線も減少します。


7
学習曲線についての素晴らしい点私は学習のgrepを好むだけawkのだろう..だから、あまりにも多くのツールが..重複が整理することができます。.. sedは:)を忘れることができます
異常値の

174
^^ sedは十分です。(申し訳ありませんが、私はしなければなりませんでした)
グレッグM.クルサック14年

8
私はsedの方がはるかに学習しやすいので、それを考慮する必要があります。awkをマスターする方法を学ぶとき、swedをすばやく学習して、まだawkでの操作方法がわからないかもしれないものに、sedをより速く使用できるようにすると便利です。
Didier A.

1
@GregKrsakあなたは私の日を作りました。(申し訳ありませんが、私はしなければなりませんでした)
Abel Callejo

15
捨てないでsed's/search/replace'より入力する方法が容易であるawkの構文とあなたはほとんどの時間を必要とするものです。
sjas 2017年

54

どちらのツールもテキストを操作するためのものであり、両方のツールを使用できるタスクがあります。

私にとっては、それらを分離するルールは次のとおりsedです。テキストエディターで手動で行うタスクを自動化するために使用します。それがストリームエディタと呼ばれる理由です。(同じコマンドを使用してvimでテキストを編集できます)。使用するawkテキストの分析、フィールドのカウント、合計の計算、構造の抽出と再編成などを行う場合にます。

また、あなたは忘れないでくださいgrepgrepテキスト(ファイル)内の何かを検索/抽出するだけの場合に使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.