人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

AWKについて質問です。いつまでたっても awk '{print $1}' これを覚えられません。
print {'$1'}だっけ?'print {$1}'だっけ?{'print $1'}だっけ?
と混乱します。

うまい覚え方はないでしょうか?
ゴロ合わせ、こじつけ、連想ゲーム、なんでもOKです。




●質問者: DQNEO
●カテゴリ:コンピュータ
✍キーワード:AWK print うまい こじつけ 連想ゲーム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●80ポイント ベストアンサー

地味に難しいっすねー。

一応、正統派(と、思う)の回答を。


awk のスクリプトは、以下の形式を取ります。

行にマッチする条件 { 条件を満たしたときに実行するコード }

中括弧は、処理のブロックを表します。

他の言語でも、引数(パラメータ)を指定するときに、括弧を省略する流儀はあっても、

中括弧を使う流儀は、ほとんどありません。

print {...} は、まず、無いんです。


シングルクォートは、awk とは関係ありません。

シェル (bash とか csh とか) のパラメータのエスケープです。

シングルクォートで囲まないと、$ は awk が解釈する前に、シェルが解釈することがあります。


なので、print とかに関係なく、シェルから awk を呼び出すときは、awk '...' としておくのが、まず基本。

で、その中のコードは、中括弧でくくる。


全然、憶えやすくないですね orz

◎質問者からの返答

* {}は、ブロックである。

if(1){ .... } のようなものと考えればよいのですね!

* print {..} はどの言語でもありえない。

たしかに!

これで、{ print .. } となる理由がわかりました。

ありがとうございます!

awk '....' となるのは、echo '...' となるのと同じようなものと覚えておけばいいですかね。


2 ● sibazyun
●40ポイント

耳にかけているメガネのつるです。

'{print $1}'

・・・耳 ' '

・・・つる { }

【追記】あ、そうか。次でわかるかな。

めがねのレンズではなく、

耳にかけるところから、レンズまでの部分。

◎質問者からの返答

すいません、「つる」って何でしょうか・・・

普段めがねをしないもので。

無知ですいません。


3 ● Mook
●80ポイント

やはりきちんと意味を理解するのが良い気がします。


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/シェルスクリプトと同じ、と覚えておけばいいですね。

ありがとうございます!

サンプルコードは私にはちょっと難しすぎるようです。。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ