csvから指定した列の値のみ取得するのに手こずったため、その方法を共有します。
#環境
Windows10
WSL2
Ubuntu 20.04.2 LTS (Focal Fossa)
#前提
以下のファイルの中身を取得します。
test.csv
apple,banana,orange
Tokyo,Osaka,Kyoto
Baseball,Basketball,Soccer
#実行
sample.sh
#!/bin/bash
while read row; do
num=(${row//,/ })
num1=${num[0]}
echo $num1
done < test.csv
test.csvから一行ずつループ処理します。
num=(${row//,/ })
Linuxではデフォルトの区切り文字は「スペース」「タブ」「改行」($'\t\n')となっているので、カンマを「スペース」に置換し、num配列に格納します。
$ bash sample.sh
apple
Tokyo
Baseball
test.csvの最初の列の値が全て取得できてますね。
#注意
sample_false.sh
#!/bin/bash
while read row; do
num=($row)
echo ${num[0]}
done < test.csv
$ bash sample_false.sh
apple,banana,orange
Tokyo,Osaka,Kyoto
Baseball,Basketball,Soccer
カンマを「スペース」に置換しなかった場合、
csvファイルから取得した一行がひとまとまりのデータと認識され、配列の0番目の要素に全て格納されてしまいます。
###終わりです。
#関連リンク