awkスクリプトの最後にある「1」とはどういう意味ですか?

awkスクリプトの最後にある「1」とはどういう意味ですか?

私はこのawkスクリプトを読んでいます。

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

1その最終目的が何であるか疑問に思います。

答え1

プログラムは、awk中かっこの外側の条件と中かっこ内の動作で構成される一連の条件 - アクションペアです。条件は、0または空の文字列で評価された場合はfalseと見なされ、それ以外の場合はtrueと見なされます(初期化されていない変数は、コンテキストに応じて0または空の文字列なのでfalseです)。条件や動作を暗示することができます。条件のない中括弧(開始など)は真の条件があると見なされ、ヒット時に常に実行され、アクションのない条件は条件が満たされた場合にのみその内容を印刷します。

スクリプトの最後には1何もしない(常にtrue)条件があるため、各行でデフォルトの操作を実行してその行を印刷します(中括弧内の以前の操作によって変更された可能性があります)。

答え2

私はこの種のショートカットが構文解析方法を混乱させ、誤解させるので本当に好きではありません。このような内容を読むと、前の文が修正されているとawk -F"=" '{OFS="=";gsub(",",";",$2)}1'考えることもできます。あるいは、技術的に間違ったエイリアスだと1思うかもしれません。1{print}

実際には1完全に別々のステートメントです。次のようにステートメントを分離できます。

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

各awkステートメントの形式はですcondition {action}{action}指定しない場合、デフォルトのアクションはです{print}。 (condition指定しない場合はデフォルト条件が使用されますtrue。)

1条件は次のとおりです。trueゼロではないので、常に次のように評価されます。省略されたため、actionデフォルト値が実装されます。{print}次のように考えることができます。

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

答え3

1すべての行を印刷することを意味します。

awk文は、次のように書くのと同じです。

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'

関連情報