Infra Engineer

ファイルの各行から必要な部分の抜き出し ~cutコマンド~
2021.03.02
Lv1

ファイルの各行から必要な部分の抜き出し ~cutコマンド~

今回の内容

今回は、cutコマンドについて解説します。

cut
まとめ
練習問題


cut

指定したテキストファイルの各行から、必要な項目のみ抜き出して表示するには「cut」コマンドを使用します。

cutコマンド
意味 指定したテキストファイルの各行から、必要な項目のみ抜き出して表示する
書式 cut [オプション] [ファイル名]
例)
/etc/passwd からユーザー名のみ抜き出して表示する
[root@localhost ~]# cut -f1 -d: /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

下記にwcコマンドのオプションを紹介します。

オプション 説明
-f 表示するフィールドの指定
-d デリミタ(区切り文字)の指定

フィールドとは、区切り文字で区切った際にできる各項目です。上記の例では、/etc/passwd の項目を抜き出しています。
/etc/passwd は「:」で区切られていますので、-d オプションで「:」を指定しています。デフォルトでは区切り文字は半角スペースとなっています。
ユーザー名は1番目のフィールドですので、-f オプションで1を指定します。フィールドは複数指定することが可能です。


例)
複数フィールドの指定
[root@localhost ~]# cut -f1,7 -d: /etc/passwd
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown

1番目と7番目のフィールドを指定したことにより、ユーザー名:ログイン時のデフォルトシェルという形で出力されています。
cutコマンドは、CSVフォーマットのファイルから一部分を抜き出したい時などに便利です。

例)
CSVファイルから一部分を抜き出す
[root@localhost ~]# cat test.csv
id,name,age,address
1,"Taro",11,"Tokyo"
2,"Hanako",21,"Saitama"
3,"Jiro",15,"Chiba"

[root@localhost ~]# cut -f2,4 -d, test.csv
name,address
"Taro","Tokyo"
"Hanako","Saitama"
"Jiro","Chiba"

注意したいのは、cutコマンドはあくまでも出力結果を整形しているに過ぎないということです。言い換えれば、元のファイルが書き換わっているわけではありません。
整形後の出力結果がファイルとしてほしい場合は、リダイレクトを使用します。

例)
cutコマンドの出力をファイルとして保存する
[root@localhost ~]# cut -f2,4 -d, test.csv > test2.csv
[root@localhost ~]# cat test2.csv
name,address
"Taro","Tokyo"
"Hanako","Saitama"
"Jiro","Chiba"

まとめ

今回は、ファイルの各行の一部分のみを抜き出して出力するcutコマンドについてでした。
何らかのデータをもとに、スクリプトの処理を実行したい!みたいなケースでは特によく使われるコマンドです。今回取り上げた使い方ができるようにぜひマスターしましょう。

それでは今回はこのあたりで。

確認問題

問題1

テキストファイルの各行の一部分のみを抜き出して出力するコマンドは次のうちどれか。

A) sort
B) cut
C) tr
D) tail

解答・解説
答え:B

A) ⇒ 出力内容を並べ替えるコマンドなので誤りです。
B) ⇒ 正解です。
C) ⇒ 出力内容の文字を置き換えるコマンドなので誤りです。
D) ⇒ ファイルの末尾部分を表示するコマンドなので誤りです。

問題2

「/」で区切られたファイル「test.txt」の、第2フィールドと第5フィールドを抜き出して出力するコマンドラインとして正しいものを選択しなさい。

A) cut -f/ -d2,5 test.txt
B) cut -f2,5 -d’/’ test.txt
C) cut test.txt
D) cut -f2 5 -d/ test.txt

解答・解説
答え:B

A) ⇒ フィールドを指定するオプションと、デリミタを指定するオプションが逆なので誤りです。
B) ⇒ 正解です。デリミタの指定は、”で囲むこともできます。
C) ⇒ デリミタもフィールドも指定されていないので誤りです。
D) ⇒ 複数フィールドを指定するには、「,」で区切らなくてはならないため誤りです。

Linux資格 「LPIC Lv1」徹底解説 連載目次リンク

Linux資格 「LPIC Lv1」徹底解説 連載目次

連載執筆講師が講座開講中!ITスクール SAK

ITスクールSAK | LPIC Lv1合格保証コース 講座紹介ページ