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;}'