1. ホーム
  2. sed

[解決済み】sedとawkの違いは何ですか?[クローズド]

2022-04-28 04:34:40

質問

  • awk の違いは何ですか? とsedは?
  • どのような用途で使うのがベストなのか sed や awk のツールはどのような場合に使うのでしょうか?

どのように解決するのですか?

sed は、ストリームエディタです。行単位で文字のストリームを扱うことができます。パターンマッチやアドレスマッチに加え、後藤式ループや簡単な条件分岐を含む原始的なプログラミング言語を持っています。変数には、パターンスペースとホールドスペースの2つしかありません。スクリプトの可読性は難しいかもしれません。数学的な演算が非常に難しい。

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

awk は、行単位で区切られたフィールドを指向しています。これは、より堅牢なプログラミング構造を持っています。 if / else , while , do / whilefor (C言語スタイルと配列の反復)。変数と一次元の連想配列に加え,(IMOの)やっかいな多次元配列も完全にサポートされています.数学的な演算はC言語と同様です。 printf と関数があります。AWKのK"はquot.の略です。 K ernighan" は、「Cプログラミング言語」で有名な Kernighan and Ritchie" のことです(忘れてはいけないのは、「Cプログラミング言語」です)。 A ホーと W einberger)。を使った学術的な盗作検出器を書くことも考えられる。 awk .

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

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

を使うことが多いですね。 sed は、テキストにパターンがある場合です。例えば、ある文章中のマイナス数字で、"マイナス記号の後に数字が続く形式(例えば "-231.45")を、これを使って"会計士のカッコ(例えば "(231.45)")形式に置き換えると、改善の余地があることがわかる。

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

私なら awk は、テキストが行と列のように見える場合、あるいは awk は、quot;records" と "fields" と呼ばれています。もし、上記のような操作を、単純なカンマ区切りファイルの3番目のフィールドに対してだけ行うとしたら、次のようなことを行うかもしれません。

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

もちろん、これらはごく簡単な例に過ぎず、それぞれが提供する機能のすべてを説明しているわけではありません。