cut - フィールドをカット


cut コマンドでファイルの各行から選択されたフィールドをカットすることができます。 少しオプションを説明します。

  • -c[num1]-[num2] num1 文字目からnum2 文字目までを切り出す
  • -d [str] フィールドの区切り文字(delimiter)として文字列 str を使用。-f と併用する。
  • -f[num1]-[num2] 指定したフィールドを出力

例えば

xxxxxxxx:*:22222:1000:AAAAAAA:/home/xxxxxxxx:/usr/local/bin/tcsh
xxxxxxxx:*:33333:1000:BB:/home/xxxxxxxx:/usr/local/bin/tcsh
xxxxxxxx:*:11111:1000:CCC:/home/xxxxxxxx:/bin/csh
xxxxxxxx:*:44444:1000:DDDDD:/home/xxxxxxxx:/usr/local/bin/tcsh
xxxxxxxx:*:22222:1000:EEEEEE:/home/xxxxxxxx:/usr/local/bin/bash

のような内容のファイル [file] があったとします。

% cut -c5-30 [file]

とすると

xxxx:*:22222:1000:AAAAAAA:
xxxx:*:33333:1000:BB:/home
xxxx:*:11111:1000:CCC:/hom
xxxx:*:44444:1000:DDDDD:/h
xxxx:*:22222:1000:EEEEEE:/

のように 5 文字目から 30 文字目まで cut して出力されます。

% cut -c1,3,7

とすると 1,3,7 文字目を切り出します。

% cut -c-30

とすると 行頭から 30 文字目までを切り出します。

% cut -c30-

とすると、30 文字目から行末までを切り出します。

% cut -c1-3,4,7-

のようにもできます。

% cut -f1-4 -d":" [file]

とすると

xxxxxxxx:*:22222:1000
xxxxxxxx:*:33333:1000
xxxxxxxx:*:11111:1000
xxxxxxxx:*:44444:1000
xxxxxxxx:*:22222:1000

のように出力されます。 フィールド区切り文字(delimiter)を : にして 1 から 4 番フィールドを切り出します。 デフォルトの区切り文字はタブ文字です。 この -f1-4 の部分も -c と同じように数字を指定できます。

% cut -f1-4 -d":" --output-delimiter="<>" [file]

とすると

xxxxxxxx<>*<>22222<>1000
xxxxxxxx<>*<>33333<>1000
xxxxxxxx<>*<>11111<>1000
xxxxxxxx<>*<>44444<>1000
xxxxxxxx<>*<>22222<>1000

のように出力時の区切り文字を指定できます。

awk で書けば

% awk -F: '{print $1"<>"$2"<>"$3"<>"$4}' [file]

のようになります。$1,$2 とかがちょっとめんどくさいですよね。

より詳しくは man cut で。


xrea