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の知識をつけるのに有用な本です.
リンク
リンク
参考になれば幸いです.