csvファイルから取得した値を名前にしたディレクトリをたくさん作る


はじめに

csvファイルから値を取得し、それらを名前にしたディレクトリをたくさん作るための、Linuxコマンドの使用例です。
タイトルに「たくさん作る」とありますが、今回は10行だけのサンプルデータを使っています。
3項目目にoccupationとありますが、この値を名前にしたディレクトリを作成しました。

コマンド実行前のディレクトリの構成

最初はdataディレクトリにcsvファイルが1つあるだけです。

$ tree
.
└── data
    └── members.csv

CSVファイルの中身

csvファイルの中身は次の通りです。名前、年齢、職業が格納されています。
scientist, engineerのみ複数現れ、他のoccupationはそれぞれ1度のみ現れます。

members.csv
name,age,occupation
akira,23,scientist
hana,31,chemist
taro,56,engineer
jun,30,engineer
takeshi,40,programmer
tsuru,28,statistician
jiro,42,engineer
suzuki,65,scientist
mitsu,34,doctor
chika,25,student

コマンド作る際の方針

  • 1行目のタイトルは使わない。
  • scientistやengineerなど複数ある場合は複数作らず、1つだけ作成する。

このようなコマンドを作った

cat data/members.csv | awk -F',' '{if(NR>1)print $3}' | sort | uniq | xargs -I{} mkdir ./{}
  1. catでcsvファイルの中身を読み込みます。
  2. awkで1行目をスキップし、3番目の値をプリントします。
  3. sortで整列します。
  4. uniqで複数ある値を1つにします。
  5. xargsで標準入力の値を使ってmkdirによりディレクトリを作成します。-Iオプションで標準入力の値に置き換える文字列を指定します。

コマンド実行後のディレクトリの構成

treeを使ってディレクトリ構成を見てみます。

$ tree
.
├── chemist
├── data
│   └── members.csv
├── doctor
├── engineer
├── programmer
├── scientist
├── statistician
└── student

コマンドが正しく動いていることが分かりました。

おわりに

csvファイルから取得した値を名前にしたディレクトリをたくさん作りました。
基本的なコマンドだけで作成できました。