UNIX awk コマンドメモ

 
UNIXコマンド awk 

% awk '条件文{実行文}' ファイル名
  {} の前に任意の正規表現を書くと、そこにマッチした行に対して {} 内が実行される。
  括弧は「中括弧」{}でなくてはならない。
  条件文は省略可能。 

-F オプション フィールドセパレータ
各列は$1 $2などは , で区切る。

% ls -l | awk '{print $5,$9}'
  ファイルサイズとファイル名の一覧が得られる。


% ls -l | awk '/abc/ {print $5,$9}'
  abc を含むそのファイルサイズとファイル名を表示する。



特殊なパターンとして BEGIN と END がある。BEGIN は最初に実行され、END は最後に実行される。
% ls -l | awk 'BEGIN { print "START!"} {total+=$5; print $9} END {print "size total="total} '



スクリプトとして動作させるには、
下記のようなスクリプトを作成して
例
#!/usr/bin/awk -f
BEGIN { print "START!"}
{total+=$5; print $9}
END {print "size total="total}

awk -f 作成したスクリプト を指定して実行


print文中ではC言語の主な演算記号が使える。

% awk '{print $1,$2*2.0,$3/3.0}' datafile
  3列あるデータファイルのうち、1列目はそのまま、2列目は2倍、
  3列目は3で割る 

% awk '$1 > 4.0{print}' datafile
  一列目が4.0よりも大きければ出力。
  print文で列を指定しなければ全列が出力される。$0と明示的に指定することも可能。

% awk '$1 <= 5.0 {print $3} $1 > 10.0 {print $2}' datafile
  1列目が5以下なら3列目を出力し、1列目が10より大きければ2列目を出力。

% awk '$1 == "S"{print}' datafile
  条件文の中で比較対象が文字の場合は、""で括る。

% awk '$1 !~ "#"{print}' datafile
  読み飛ばしたい行には行頭に#をつけ、#をコメントアウト行と認識させる。
  #で始まる行はスキップする。正確には、1列目に#が含まれていなければ出力する。
  ~はその列にある文字が含まれている時という条件を表し、
  !は直後の条件を否定(not)する。

% awk '{printf("%d %f %s\n",$1,$2,$3)}' datafile
  出力書式を指定したいときに用いる。
  printfの用法はC言語のprintfに準ずる。

% awk 'NF >0 {print $1}' datafile
    空行をスキップさせる。
    NFはawkの変数で、現在読み込んでいる行の列(フィールド)の数を表す。

% awk '{if ($1 == "B" || $1 == "N") print "B"; else print "C"}' datafile
    if/else文。複雑な条件文を組み込む。
    if文以下の||は「または」(or)を表す。「かつ」(and)は&&。


% awk '{if ($1 !~ "#") if ($1 == 0 && $2 == 0) print $0,0.5,"r"; 
      else print $0,$1/($1+$2); else print "# is escaped."}' datafile
        
    同じくif/else文。二重に入れ子になっているとき。
    上記の例は二行に分けてあるが、実際は一行につなげて書く。

% awk 'NR==1{s0=$1 } NR!=1{r=$1-s0; s0=$1; print r}'  datafile
     前後の行での処理。例は、1列目において、1行前の値を今の行の値から引いて出力する。
     1行目では今の値を保持させるのみとし、2行目以降で引き算を行っている。
     NRはNFと同様にawkの変数で、処理をした行の数を表す。
     s0というのは、自分で設定した変数。ここに前の行の一列目の値を保持させている。

% awk '{print substr($0,3,6);}' datafile
     3文字目から6文字出力

awk内の変数を挙げる。 
NF :列の数 
NR :行の数。 
FILENAME :今読み込んでいるファイルの名前 



[一つ前に戻る] TOP PAGE
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送