awkのドア間の区切り記号

awkのドア間の区切り記号

Gawkのマニュアルから:

ルールの awk 文が短い場合は、1 行に複数の文を入力する必要があります。これは、セミコロン( ';')でステートメントを区切ることによって行われます。これはルール自体にも当てはまります。したがって、このセクションの冒頭に表示されるプログラムは次のように書くこともできます。

/12/ { print $0 } ; /21/ { print $0 }

注:元のawk言語には、同じ行の規則をセミコロンで区切る必要はありません。これは、アクションのステートメントの処理と一貫性を維持するために追加されました。

しかし、私は絶対にhttps://stackoverflow.com/q/20262869/156458

awk '$2=="no"{$3="N/A"}1' file

$2=="no"{$3="N/A"}そして2つの声明ではありませんか1?なぜ彼らは何も分からないのですか?

ありがとうございます。

ベストアンサー1

とても良い質問です!私が考える鍵は次のとおりです。「したがって、このセクションの冒頭に示されている手順は、次のように書くこともできます。この方法:"

このように書くことは必須ではありません。これは代替方法です。これは、以下の記述がすべて真実であることを意味します(実際に証明されています)。

$ awk '/12/ { print $0 } /21/ { print $0 }' file
$ awk '/12/ { print $0 } ; /21/ { print $0 }' file

セミコロンを使用することは、作業部分を省略し、同じ行に複数のルールを適用したい場合など、非常に短い慣用的なコードを扱うためのものだと思います。

$ awk '/12//21/' file
awk: cmd. line:2: /12//21/
awk: cmd. line:2:         ^ unexpected newline or end of string

この場合、セミコロンを使用して規則(=条件)を区切る必要があります。

$ awk '/12/;/21/' file

両方のルール/両方の条件でこの{action}部分が省略されるため、各ルールに対して基本操作が実行されます。{print $0}

おすすめ記事