awkスクリプトの最後にある1の意味は何ですか


19

このawkスクリプトを読んでいた

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

1最後に何の機能があるのか​​知りたい


あなたも行うことができますawk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

回答:


24

awkプログラムは、条件とアクションのペア、それらに囲まれ、中括弧や行動の外にある一連の条件です。条件がゼロまたは空の文字列と評価された場合、条件は偽と見なされます。それ以外はすべて真です(初期化されていない変数は、コンテキストに応じてゼロまたは空の文字列なので、偽です)。条件またはアクションのいずれかを暗黙指定できます。条件のない中括弧(開始時)は真の条件と見なされ、ヒットした場合は常に実行されます。アクションのない条件は、条件が満たされた場合にのみ行を出力します。

1それは(括弧内の前のアクションによって変更された可能性があります)行を印刷し、すべての行のデフォルトのアクションを実行して、スクリプトの最後には、アクションなしで条件(常にtrue)です。


7

これらの種類のショートカットは、構文解析の難読化と誤解を招くため、本当に嫌いです。のようなものを読むと、前のステートメントを変更し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}
'

5

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

awkステートメントは次の記述と同じです。

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.