[Linux] csv, tsvから特定列のみ表示するコマンド(cut, awk)

記事内に広告が含まれています。
スポンサーリンク

csv形式のファイルから,特定の列の値だけ確認したいときに便利なコマンドが「cut」コマンドです.本記事では,このコマンドの使い方についてまとめいきます.

スポンサーリンク

結論

-d の後ろに区切り文字, -fの後ろに欲しい列目の数字を指定します.

$cut -d "区切り文字" -f 数字 "ファイル名"

前提

実行環境は,MacOS 13, GNU bash, version 3.2.57 です.

サンプル用csv

$cat sample.csv 
id,name,算数,国語,英語
1,山田,90,80,70
2,田中,85,75,80
3,伊藤,70,80,100

csvから特定列のみ取り出す

cutコマンドの場合

例えば1列目と2列目だけ取り出して,各人のidを知りたいとします.

$cut -d "," -f 1,2 sample.csv
id,name
1,山田
2,田中
3,伊藤

-d オプションが区切り文字,-f オプションが取り出す列 (上の例では1列目と2列目)を指定します.

awkコマンドの場合

「awk」コマンドを使う方法も存在します.

$cat sample.csv| awk  -F, '{print $1, $2}'
id name
1 山田
2 田中
3 伊藤

tsvから特定列のみ取り出す

cutコマンドの場合

tsvの場合,-d オプションなしで抽出できます.

$cut -f 1,2 sample.tsv
id      name
1       山田
2       田中
3       伊藤

ちなみに,cutコマンドのデフォルトの区切り文字はタブ文字です.

$man cut
...略...
-d delim
             Use delim as the field delimiter character instead of the tab character.

awkコマンドの場合

$cat sample.csv| awk -F,  '{print $1, $2}'
id name
1 山田
2 田中
3 伊藤

不等式を使って特定列の特定の値を抽出

awk コマンドを使うと,不等式で特定の行だけ表示することも可能です.

$cat sample.tsv| awk  '$3>=80 {print $2, $3}'
name 算数
山田 90
田中 85

上のコマンドは,算数の列($3)で80点以上の人だけ,名前と点数を抽出するコマンドです.

まとめ

csv, tsvから特定の列だけ抽出する方法についてまとめました.

参考文献を以下に挙げます.資格対策本ですが,Linuxの知識をつけるのに有用な本です.

参考になれば幸いです.

Linux
スポンサーリンク