cut - テキスト・文字列を操作するコマンド
ファイルの各行から指定文節を取り出す
■よく使う形(例)
※半角スペースで区切った4つ目の文字列をaccess.logから抽出する。
# cut -d ' ' -f 4 access.log
[18/Feb/2007:04:31:10[18/Feb/2007:04:31:11
[18/Feb/2007:05:04:36
[18/Feb/2007:05:04:37
テキストファイル内から、ある文字列の部分を取り出すのに非常に便利なコマンドです。
上記の例は、apacheのアクセスログから日付の部分だけを取り出しています。
64.124.85.212 - - [18/Feb/2007:04:31:11 +0900] "GET /robots.txt HTTP/1.1" 200 286 "-" "Mozilla/5.0 (compatible; BecomeJPBot/2.3; MSIE 6.0 compatible; +http://www.become.co.jp/site_owners.html)"
72.30.177.82 - - [18/Feb/2007:05:04:36 +0900] "GET /robots.txt HTTP/1.0" 200 286 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
72.30.177.82 - - [18/Feb/2007:05:04:36 +0900] "GET /robots.txt HTTP/1.0" 200 286 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
実際のaccess.logは上記のように なっているですが、各フィールドがスペースで区切られていることがわかります。第1フィールドはIPアドレス、2つ飛んで第4フィールドがアクセス日時と なっ ていることから、アクセス日時を取り出したいときは上記のようなコマンドになりました。
実際には最初の"["の文字が入ってしまうので、 アクセス日時を抽出するには、もう一度cutコマンドを使うのもいいと思います。
# cut -d ' ' -f 4 access.log | cut -c2-
18/Feb/2007:04:31:1018/Feb/2007:04:31:11
18/Feb/2007:05:04:36
18/Feb/2007:05:04:37
■主なオプション
オプション | 機能説明 |
---|---|
-c | 指定した位置の文字だけ表示する。 -c 1-10 とすると最初の文字から10文字目まで表示。 -c8- と指定すると、8文字目以降を表示する。 |
-f | 指定した位置の文字だけ表示する。 -f 2,14 とすると、第2フィールドと第14フィールドを表示する。 |
-d | 区切り文字を指定する。 指定がない場合のデフォルトはタブ |