awk program は一連の条件とアクションのペアであり、条件は中括弧の外側にあり、アクションはそれらで囲まれています。条件がゼロまたは空の文字列に評価される場合、条件は偽と見なされます。それ以外はすべて真です (初期化されていない変数は、コンテキストに応じてゼロまたは空の文字列であるため、偽となります)。条件またはアクションのいずれかを暗示することができます。条件のない中かっこ (開始時) は真の条件があると見なされ、ヒットした場合は常に実行されます。アクションのない条件は、条件が満たされた場合にのみ行を出力します。
1 スクリプトの最後は、アクションのない条件 (常に true) であるため、すべての行に対してデフォルトのアクションを実行し、行を出力します (中括弧内の前のアクションによって変更された可能性があります)。
この種のショートカットは、解析方法をわかりにくくし、誤解を招くため、私は本当に嫌いです。 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}
'
1 すべての行を印刷することを意味します。
awk ステートメントは次の記述と同じです:
awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'