Просмотрите CSV-файл и сохраните все уникальные элементы столбца в массив.

Просмотрите CSV-файл и сохраните все уникальные элементы столбца в массив.

Я анализирую очень большой файл csv и создаю много подфайлов с его содержимым в соответствии со значением первого столбца. До сих пор я вручную объявлял массив:

declare -a arr=(
"Value 1"
"Value 2"
)

а затем я прохожусь по этому массиву и создаю мини-CSV-файлы с нужной мне информацией, а также меняю имена выходных CSV-файлов, заменяя пробелы подчеркиваниями:

for i in "${arr[@]}"
do 
    NAME=${i// /_}
    echo $header > "$outputpath/$NAME.csv"
    grep "^$i," "$fixed_file" | cut -d ',' -f 4,6 >> "$outputpath/$NAME.csv"
done

Есть ли способ автоматизировать и первый шаг? То есть, можно ли пройтись по исходному CSV-файлу и заполнить arr всеми уникальными значениями его столбца 1?

решение1

В одну сторону:

declare -A arr
while IFS=, read -r one rest
do
  arr[$one]=1
done < input.csv

Затем пройдитесь по ключам:

for i in "${!arr[@]}"
do
  #...
done

Связанный контент