cut
何するコマンド?
テキストファイルの各行から指定範囲内の文字列を抜き出して表示するときに使うコマンド
書き方
cut [オプション] [対象のファイル名]
オプション
| オプション | 説明 |
|---|---|
| -b 【範囲指定】 | バイト単位で抜き出す範囲を指定 |
| --bytes=【範囲指定】 | |
| -c 【範囲指定】 | 文字単位で抜き出す範囲を指定 |
| --characters=【範囲指定】 | |
| -d 【区切り文字】 | 区切り文字としてタブ以外を使う。「-f」オプションと併用 |
| --delimiter=【区切り文字】 | |
| -f 【範囲指定】 | フィールド単位で抜き出す範囲を指定 |
| --fields=【範囲指定】 | |
| -n | 日本語とかの2バイト文字を途中でぶったぎらない。「-b」オプションと併用 |
| --complement | complement the set of selected bytes, characters or fields. |
| -s | 区切り文字を含まない行は表示しない。「-f」オプションと併用 |
| --only-delimited | |
| --output-delimiter=STRING | use STRING as the output delimiter the default is to use the input delimiter |
| --help | ヘルプを表示する |
| --version | ライセンスとかバージョンとかを表示する |
補足事項
範囲指定の仕方は以下の通りです。
例として、数字は「5バイト目(5文字目、5番目のフィールド)」と「10バイト目(10文字目、10番目のフィールド)」を使っています。
| 指定 | 意味 |
|---|---|
| 5 | 5バイト目(5文字目、5番目のフィールド) |
| 5- | 5バイト目(5文字目、5番目のフィールド)から最後まで |
| 5-10 | 5バイト目(5文字目、5番目のフィールド)から10バイト目(10文字目、10番目のフィールド)まで |
| -10 | 最初から10バイト目(10文字目、10番目のフィールド)まで |
それでは、実際の使い方を見てみましょう。
例えば以下のファイルがあったとします。
■file1.txt
abcde【タブ】fghij【タブ】klmno
pqrst【タブ】uvwxy【タブ】z
この状態で
cut -b 3 file1.txt
を実行すると、結果は
c
r
に なります。
1行目の先頭から3バイト目の文字「c」と2行目の先頭から3バイト目の文字「r」が表示されています。
cut -b 3- file1.txt
を実行すると、結果は
cde【タブ】fghij【タブ】klmno
rst【タブ】uvwxy【タブ】z
に なります。
それぞれの行において、先頭3バイト目から最後まで抜き出されています。
cut -b 3-5 file1.txt
を実行すると、結果は
cde
rst
に なります。
それぞれの行において、先頭3バイト目から5バイト目まで抜き出されています。
cut -b -5 file1.txt
を実行すると、結果は
abcde
pqrst
に なります。
それぞれの行において、先頭3バイト目から5バイト目まで抜き出されています。
これが基本的な使い方です。
上の例ではバイト数単位で指定しましたが「-c」を指定すれば文字数単位で抜き出せます。
cut -c 2 file1.txt
を実行すれば
b
q
に なります。
ありゃ、アルファベットなのでバイト単位で抜き出したときと同じ結果ですね。
「-c」オプションは日本語とかを扱うときに意味を持ってきます。
「-f」を指定すれば区切り文字を基準としたフィールド単位で抜き出せます。
cut -f 2 file1.txt
を実行すれば
fghij
uvwxy
に なります。
タブを区切り文字として、各行の2番目のフィールドが表示されています。
あと取り上げておくべきは「-n」オプションでしょうか。
例えば以下のファイルがあったとします。
■file2.txt
あいうえお
この状態で
cut -b -5 file2.txt
を実行すると、私の環境では
あ・
と表示されます。
これは日本語が3バイトで数えられているので、2文字目の「い」の途中でぶった切られているのが原因です。
このようなマルチバイト文字が途中でぶった切られないようにするためのオプションが「-n」です。
「-n」オプションを指定して
cut -b -5 -n file2.txt
を実行すると、私の環境では
あ
に なります。
「い」が途中でぶった切られないように、キリの良いところでぶった切ってくれたのでしょうね。
日本語を含むファイルからバイト単位で抜き出すときは意識してあげてください。
