環境
linux系のサーバー
基本構文
「1ライン」と、「ファイル書き込み」の2パターンがある。
「1ライン」を覚えると、phpなどでさくっと使えるし、コマンドでさくっとできるので、まずはそこから覚えよう。
目的
SQLの代わりに使う
1、大容量のデータファイルから、なる早でデータを抽出する。
2、データファイル内の検索とヒット件数
3、組み合わせ検索
手順
プログラムファイルとデータファイルを利用
データファイルは、sqlの代わりなので本来ならDB設計から行うべきだが、とりあえずは、レコード式のログデータで代用する。
データファイル
馴染みのあるapacheのaccessログを使う
書き方サンプル
1、apacheログのレコード数(行数)※自宅がubuntuなんでdebianディストリで描きますんで、その他の場合は、ファイルパスを合わせてください。
$ awk '{count++;}END{print count;}' /var/log/apache2/access.log
※logディレクトリに読み取り権限がない場合はsudoを使ってください。
2、useragentに「iphone」がある行数(iphoneのアクセス数)
$ awk '{if($0~/iPhone/){count++;}}END{print count;}' /var/log/apache2/access.log
awkのマッチングなどで'(シングルクォーテーション)を使う場合
'(シングルクォーテーション)を
"\047" に置き換えると、正常にマッチングできる。
awkの指定変数
- [変数名] [内容]
- $0 レコード全体の内容
- $n 第nフィールドの内容
- $NF 最後のフィールドの内容
- NR 現在まで読み込んだレコード(行)数
- NF 現在処理しているレコード(行)のフィールド数
- FS フィールドの区切り文字
- OFS 出力フィールドの区切り文字
- FNR 現在処理しているレコード番号(行数)
- FILENAME 処理しているファイル名
awkでファイル比較
$ awk 'NR==FNR{data1[$1]++;data2[$1]=$2;next}$1 in data1{print $1" "data2[$1]" "$2}' file1 file2
awkの正規表現
- ◇含む
$1~/abc/
- ◇大文字小文字の区別をしない
tolower($1)=/abc/
- ◇完全一致しない
$1!="abc"
- ◇含まない
$1!~/abc/
- ◇完全一致
$1=="abc"
0 件のコメント:
コメントを投稿