awkを使って、サーバー処理とIOに強くなろう #2

awk
LINEで送る
Share on GREE
Share on LinkedIn

環境
linux系のサーバー

基本構文
「1ライン」と、「ファイル書き込み」の2パターンがある。
「1ライン」を覚えると、phpなどでさくっと使えるし、コマンドでさくっとできるので、まずはそこから覚えよう。

目的
SQLの代わりに使う
1、大容量のデータファイルから、なる早でデータを抽出する。
2、データファイル内の検索とヒット件数
3、組み合わせ検索

手順
プログラムファイルとデータファイルを利用
データファイルは、sqlの代わりなので本来ならDB設計から行うべきだが、とりあえずは、レコード式のログデータで代用する。

データファイル
馴染みのあるapacheのaccessログを使う

書き方サンプル

1、apacheログのレコード数(行数)※自宅がubuntuなんでdebianディストリで描きますんで、その他の場合は、ファイルパスを合わせてください。

※logディレクトリに読み取り権限がない場合はsudoを使ってください。

2、useragentに「iphone」がある行数(iphoneのアクセス数)

awkのマッチングなどで'(シングルクォーテーション)を使う場合

‘(シングルクォーテーション)“\047″ に置き換えると、正常にマッチングできる。

awkの指定変数

– [変数名] [内容]
– $0 レコード全体の内容
– $n 第nフィールドの内容
– $NF 最後のフィールドの内容
– NR 現在まで読み込んだレコード(行)数
– NF 現在処理しているレコード(行)のフィールド数
– FS フィールドの区切り文字
– OFS 出力フィールドの区切り文字
– FNR 現在処理しているレコード番号(行数)
– FILENAME 処理しているファイル名

awkでファイル比較

awkの正規表現

– ◇含む
  $1~/abc/
– ◇大文字小文字の区別をしない
  tolower($1)=/abc/
– ◇完全一致しない
  $1!=”abc”
– ◇含まない
  $1!~/abc/
– ◇完全一致
  $1==”abc”

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*