Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

cut、head、tail、sort・・・定番のフィルタコマンドを使いこなす!
~業務でラクするためのUNIXテクニック~

第3回 「並べ替え」編

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/05/19 14:00

 今回は、cut、paste、sort、uniq、head、tail、wcといった定番のフィルタコマンドを使ったテクニックを説明します。なお、この連載ではUNIX系OSをコマンドライン上から効率よく利用するために知っておくべきテクニックや、便利な小技を紹介しています。

目次

はじめに

 この連載では、UNIX系OSをコマンドライン上から効率よく利用するために知っておくべきテクニックや、便利な小技を紹介していきます。

 今回は、「定番のフィルタコマンドを使いこなす」ためのテクニックを紹介します。

今までの記事

対象読者

  • UNIX系OSコマンドを一通り利用したことがある方
  • 正規表現を利用したことがある方
  • 何らかのプログラミング経験がある方

動作確認環境

  • Linux(Debian etch/Fedora 9/CentOS 5.1)
  • FreeBSD 6.1
  • Cygwin 1.5.X

 なるべくUNIX系OS一般に当てはまるよう解説するので、特に記述がない場合は、Mac OS X、Red Hat Linux上でも動作します。

 シェルに関しては、bash(Bourne-Again Shell 2および3)を想定しています。

定番のフィルタコマンドを使いこなす

 標準入力からデータを受け取り、その結果を標準出力に出力するコマンドを「フィルタコマンド」と呼びます。フィルタコマンドは、「|(パイプ)」で繋げることで、ログの解析などさまざまな処理ができます。

 今回は、定番のフィルタコマンド(cutpastesortuniqheadtailwc)のテクニックを説明します。

ファイル内文字列の分割

cutコマンド

 cutコマンドは、特定の文字で区切られた項目を分割します。利用方法は次のようになります。

cutコマンドの基本文法
$ cut [オプション] [ファイル名]

 主なオプションは次のとおりです。

cutコマンドの主なオプション
オプション 説明
-c 切り出す文字数を指定する
-d 区切り文字を指定する(デフォルトはタブ)
-f 表示する項目を指定。区切った順に左から1,2,3...
-s 列の区切りのない行を無視する
例)「/etc/passwd」ファイルからユーザー一覧を出力

 「/etc/passwd」ファイルは、ログインを許可するユーザー一覧などを管理しています。この中から、ユーザー名だけを出力するには、下記のように指定します。

$ cut -d : -f1 /etc/passwd
root
daemon
...(省略)
例)カンマ区切りの2列目以降を切り出す
$ echo "field1,field2,field3,field4,field5" | cut -d , -f2-
field2,field3,field4,field5

 「,(カンマ)」区切りで、2列目から最後の列まで切り出しています。

例)1文字目と3文字目を切り出す
$ echo "1234567" | cut -c1,3
13

 「-d」オプションで区切り文字を指定しない場合は、タブが使用されます。

例)スペース区切りの1列目と3列目を切り出す
$ echo "field1 field2 field3 field4 field5" | cut -d ' ' -f1,3
field1 field3

 「 (空白)」区切りの場合は、「' '(シングルクォーテーション)」、もしくは「" "(ダブルクォーテーション)」で括ります。

※注1

cutコマンドでは、連続する空白文字を1つの区切り文字として扱うことができません。空白区切りの列を切り出すにはawksedなどが利用できます。

awkを使うと次のように指定できます(詳細は次回以降に説明します)。

$ echo "field1 field2 field3 field4 field5" | awk '{ print $1,$3 }'

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:業務でラクするためのUNIXテクニック集

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5