Diff of UNIX/コマンド/テキスト処理/cut


TITLE:cut - フィールドをカット
#navi(UNIX/コマンド)
#contentsx

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,4 文字目を切り出します。
とすると 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 で。

#navi(UNIX/コマンド,,footer)
xrea