print {'$1'}だっけ?'print {$1}'だっけ?{'print $1'}だっけ?
と混乱します。
うまい覚え方はないでしょうか?
ゴロ合わせ、こじつけ、連想ゲーム、なんでもOKです。
地味に難しいっすねー。
一応、正統派(と、思う)の回答を。
awk のスクリプトは、以下の形式を取ります。
行にマッチする条件 { 条件を満たしたときに実行するコード }
中括弧は、処理のブロックを表します。
他の言語でも、引数(パラメータ)を指定するときに、括弧を省略する流儀はあっても、
中括弧を使う流儀は、ほとんどありません。
print {...} は、まず、無いんです。
シングルクォートは、awk とは関係ありません。
シェル (bash とか csh とか) のパラメータのエスケープです。
シングルクォートで囲まないと、$ は awk が解釈する前に、シェルが解釈することがあります。
なので、print とかに関係なく、シェルから awk を呼び出すときは、awk '...' としておくのが、まず基本。
で、その中のコードは、中括弧でくくる。
全然、憶えやすくないですね orz
耳にかけているメガネのつるです。
'{print $1}'
・・・耳 ' '
・・・つる { }
【追記】あ、そうか。次でわかるかな。
めがねのレンズではなく、
耳にかけるところから、レンズまでの部分。
スクリプトで、人間がつくりあげたデータ一覧の並び方チェックをしたっけ。
各記号の意味を、ちゃんと把握しておいたほうがいいです。
シングルクォートは、引数をきちんと awk コマンドに文字列として渡すための処理。
引数に中括弧 {} があって、中括弧の中で awk に何をさせたいのか記入する。
あらわします。
if () {
:
}
while () {
:
}
回答の中の例示が良くなかったですが、
{i=i+$1+$2+$3}
は
{i=i+$1; i=i+$2; i=i+$3;}
と書いても同じで、{ }内にかける実行文は一つには限りません。
{printf "Total <= %d + %d \n",$1,$2; i=i+$1; i=i+$2;}
のようにいろいろな処理を書くこともできます。
と考えると {} の意味は少しは理解できるでしょうか。
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_4.html
など眺めるだけでも面白いかと思います。
「真空パックのプリンが1ドル」
というゴロ合わせを思いつきました。
真空 → シングルクォート
パック → {...}
プリン → print
1ドル → $1
とりあえずこれで覚えれそうです。