print {'$1'}だっけ?'print {$1}'だっけ?{'print $1'}だっけ?
と混乱します。
うまい覚え方はないでしょうか?
ゴロ合わせ、こじつけ、連想ゲーム、なんでもOKです。
地味に難しいっすねー。
一応、正統派(と、思う)の回答を。
awk のスクリプトは、以下の形式を取ります。
行にマッチする条件 { 条件を満たしたときに実行するコード }
中括弧は、処理のブロックを表します。
他の言語でも、引数(パラメータ)を指定するときに、括弧を省略する流儀はあっても、
中括弧を使う流儀は、ほとんどありません。
print {...} は、まず、無いんです。
シングルクォートは、awk とは関係ありません。
シェル (bash とか csh とか) のパラメータのエスケープです。
シングルクォートで囲まないと、$ は awk が解釈する前に、シェルが解釈することがあります。
なので、print とかに関係なく、シェルから awk を呼び出すときは、awk '...' としておくのが、まず基本。
で、その中のコードは、中括弧でくくる。
全然、憶えやすくないですね orz
地味に難しいっすねー。
一応、正統派(と、思う)の回答を。
awk のスクリプトは、以下の形式を取ります。
行にマッチする条件 { 条件を満たしたときに実行するコード }
中括弧は、処理のブロックを表します。
他の言語でも、引数(パラメータ)を指定するときに、括弧を省略する流儀はあっても、
中括弧を使う流儀は、ほとんどありません。
print {...} は、まず、無いんです。
シングルクォートは、awk とは関係ありません。
シェル (bash とか csh とか) のパラメータのエスケープです。
シングルクォートで囲まないと、$ は awk が解釈する前に、シェルが解釈することがあります。
なので、print とかに関係なく、シェルから awk を呼び出すときは、awk '...' としておくのが、まず基本。
で、その中のコードは、中括弧でくくる。
全然、憶えやすくないですね orz
* {}は、ブロックである。
if(1){ .... } のようなものと考えればよいのですね!
* print {..} はどの言語でもありえない。
たしかに!
これで、{ print .. } となる理由がわかりました。
ありがとうございます!
awk '....' となるのは、echo '...' となるのと同じようなものと覚えておけばいいですかね。
耳にかけているメガネのつるです。
'{print $1}'
・・・耳 ' '
・・・つる { }
【追記】あ、そうか。次でわかるかな。
めがねのレンズではなく、
耳にかけるところから、レンズまでの部分。
すいません、「つる」って何でしょうか・・・
普段めがねをしないもので。
無知ですいません。
やはりきちんと意味を理解するのが良い気がします。
awk は第一引数として処理コードとしての処理内容を文字列指定します。
文字列内は、AWK の文法に従う必要があり、{} で囲まれた部分を各データに
対して実行しますが、他にも、前処理BEGIN{}と後処理END{}も記述できるの
で下記のような場合もあります。
$1 はデータから渡された第一引数を示しますのでこれに '' や {} が直接
付くことはありません。
これはデータファイル data.txt 内の各行の3番目までのデータを足して
合計を表示する例ですが、このようなケースがあるとわかれば
awk 'BEGIN{i=0}{i=i+$1+$2+$3}END{print i}' data.txt
順番は理解できないでしょうか。
まとめると、$1データはいちばん内側、処理をまとめるのが{...}
全体を文字列'...'、というように理解すればよいかと思います。
* $1 はデータから渡された第一引数を示しますのでこれに '' や {} が直接つくことはない。
print $1は、Perl/PHP/シェルスクリプトと同じ、と覚えておけばいいですね。
ありがとうございます!
サンプルコードは私にはちょっと難しすぎるようです。。。
* {}は、ブロックである。
if(1){ .... } のようなものと考えればよいのですね!
* print {..} はどの言語でもありえない。
たしかに!
これで、{ print .. } となる理由がわかりました。
ありがとうございます!
awk '....' となるのは、echo '...' となるのと同じようなものと覚えておけばいいですかね。