как конвертировать из CSV в массив в bash - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в bash и хочу конвертировать CSV-файл в разные массивы. У моего csv есть 6 строк с одинаковым количеством столбцов в каждой, и мне нужно взять строки 3, 4, 5 и 6 со всеми столбцами и создать и выстроить массив из каждой строки, есть идеи, как мне это сделать?

Мой CSV выглядит так:

  1. A, B, C, ...
  2. 1, 1, 1, ...
  3. 7, 23, 58, ...
  4. 8, 24, 59, ...
  5. 9, 25, 60, ...
  6. 10, 26, 61, ...

И я хочу, чтобы мой вывод выглядел следующим образом:

array1 = (7,23,58, ...)

array2 = (8,24, 59, ...)

array3 = (9,25,60, ...)

array4 = (10,26,61, ...)

Большое спасибо

1 Ответ

1 голос
/ 11 апреля 2020

Примечание. Сценарий, приведенный ниже, приведет к созданию дополнительного пустого массива, но он должен выполнить свою работу.

Анализ .csv файлов с Bash, вероятно, не самый эффективный, но Есть способ сделать это. Обратите внимание, что массивы в Bash разделены space, а не ,.

. В приведенном ниже примере входной файл .csv равен input.csv, а выходной файл - output.txt.

#!/bin/bash
{
    read
    read
    var=0
    while IFS=, read -a arr
    do
        var=$((var+1))
        echo "array${var}=(${arr[@]})" >> output.txt
    done 
} < input.csv

Дополнительные пояснения
* Ключом здесь являются две строки read: он читает первые две строки вашего .csv ввода и затем вводит l oop, когда начнется чтение третьей строки.
* Согласно документации здесь , флаг -a назначает считанные слова последовательным индексам переменной массива ARRAY. , начиная с нуля .
* "@" используется для доступа ко всем значениям в сгенерированном массиве, полученных в результате read -a

Отредактировал мой скрипт на основе предложения @ Poshi. Скрипт выглядит чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...