[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 cut: 各行の選択した部分を表示する

cut は、各ファイルから各行の一部を抜き出して、標準出力に書き出す。 ファイルが指定されていない場合や、ファイル名として ‘-’ が指定されている場合は、標準入力を対象とする。

書式:

 
cut option… [file]…

以下のオプション一覧で byte-list, character-list, field-list と表記されているものは、コンマで区切られた、1 個以上の数字や範囲からなるリストである (範囲は、ダッシュを間に挟む 2 個の数字)。バイト、文字、フィールドは 1 から数える。 不完全な範囲を指定することもでき、‘-m’ は ‘1-m’ と同じことであり、‘n-’ は ‘n’ から行末、あるいは最後のフィールドまでと同じことである。 リストの要素は、繰り返してもよく、部分的に重なり合ってもよく、どんな順序で指定してもよい。 ただし、入力中の選択した部分が書き出されるのは、読み込まれたときと同じ順序であり、 しかも、ただ一度だけである。(訳注: たとえば、‘-f 3,1,3’ などと指定することはできるが、出力されるときは field-1, field-3 の順番であり、field-3 が二度出力されることもない。)

このプログラムでは以下のオプションが使用できる。参照: 共通オプション.

-b byte-list
--bytes=byte-list

byte-list で指定された位置にあるバイトのみを選択して、表示する。 タブやバックスペースも他の文字と同様に扱う。 すなわち、そうしたものも 1 バイトを占める。出力用のデリミタ (delimiter、区切りの印) が指定されている場合は (‘--output-delimiter’ の説明を参照)、 選択されたバイトからなる範囲同士の間にデリミタ文字列を出力する。

-c character-list
--characters=character-list

character-list で指定された位置にある文字のみを選択して、表示する。 現在のところ、‘-b’ と同じだが、プログラムの国際化が進むと、 動作が変わることになるだろう。タブやバックスペースも他の文字と同様に扱う。 すなわち、そうしたものも 1 文字と数える。 出力用のデリミタが指定されている場合は (‘--output-delimiter’ の説明を参照)、 選択された文字からなる範囲同士の間にデリミタ文字列を出力する。

-f field-list
--fields=field-list

field-list で指定されたフィールドのみを選択して、表示する。 フィールドの区切りは、デフォルトではタブ文字 1 個である。 なお、‘--only-delimited’ (‘-s’) オプションが指定されていない場合は、 デリミタ文字を全く含まない行も表示する。

一言言っておくと、awk を使えば、もっと洗練されたフィールド処理ができるようになる。 たとえば、フィールドの順番を入れ替える、 空白文字を入れて列が揃うようにしたフィールドを取り扱う、そういったことが可能になる。 awk ならデフォルトで、フィールドの区切りに空白文字の連続を使用し (そして、フィールドの前後から除去し)、さらに、行頭と行末の空白を無視してくれるのだ。

 
awk '{print $2}'      # 2 番目のフィールドを表示する
awk '{print $(NF-1)}' # 最後から 2 番目のフィールドを表示する
awk '{print $2,$1}'   # 最初の 2 フィールドを逆に並べる

cut では、任意の順番でフィールドを指定することができるが、 出力は常にファイル中で出会った順番であることに注意していただきたい。

ありそうにないことだが、awk が利用できない状況だとしよう。 その場合は、join コマンドを使えば、 上記で awk がやっているように、空白文字を処理することができる。

 
join -a1 -o 1.2     - /dev/null # 2 番目のフィールドを表示する
join -a1 -o 1.2,1.1 - /dev/null # 最初の 2 フィールドを逆に並べる
-d input_delim_byte
--delimiter=input_delim_byte

-f’ と併せて使うと、入力のフィールド区切りに input_delim_byte の最初のバイトが使用される (デフォルトはタブ)。

-n

マルチバイト文字を分割しない (現在のところ、機能しない)。

-s
--only-delimited

-f’ を使うとき、フィールド区切り文字を含まない行の表示をしない。 通常は、フィールド区切り文字を含まない行は、行全体がそのまま表示される。

--output-delimiter=output_delim_string

-f’ と一緒に使った場合は、出力フィールド間が output_delim_string で区切られる。 ‘-f’ を指定したときのデフォルトは、入力時のデリミタを使用することである。 ‘-b’ や ‘-c’ を使用して、(フィールドの範囲ではなく) バイト位置や文字位置の範囲を選択した場合は、 選択されたバイトの重なり合わない範囲同士の間に output_delim_string が出力される。

--complement

このオプションは GNU の拡張である。‘-b’, ‘-c’, ‘-f’ オプションで選択されたバイト、文字、フィールドを含まない部分を選択して、表示する。 言い換えれば、そうしたオプションによって指定されたバイトや文字やフィールドは「表示しない」ということだ。 このオプションは、フィールドがたくさんあるとき、そのうちの一部を除いたすべてを表示したい場合に便利である。

-z
--zero-terminated

項目の区切りに、改行 (ASCII LF) ではなく、ゼロバイトを使用する。 すなわち、入力を ASCII NUL で分離された項目として扱い、出力する各項目の末尾に ASCII NUL を付加する。このオプションは、‘perl -0’, ‘find -print0’, ‘xargs -0’ などと組み合わせて使用すると、 便利なことがある。そうしたコマンドでも、わがままなファイル名を (空白などの特殊文字を含んでいる場合でも) きちんと確実に処理するために、 同様なことをしているのである。

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.