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 とかがちょっとめんどくさいですよね。