Скрипт оболочки для разбора файла (csv) и обработки построчно - PullRequest
16 голосов
/ 14 декабря 2010

Привет Нужен сценарий оболочки для анализа файла csv - строка за строкой, а затем поле за полем]

файл будет выглядеть так

X1,X2,X3,X4
Y1,Y2,Y3,Y4

Мне нужно извлечь каждыйиз этих X1, X2 ....

Я написал сценарий, но он не работает, если строка превышает одну строку ..

Ответы [ 3 ]

40 голосов
/ 14 декабря 2010

Вот как я бы это сделал.

Сначала я установил переменную среды IFS, чтобы сообщить read, что "," - это разделитель полей.

export IFS=","

Учитывая файл "вход ", содержащий данные, которые вы предоставили, я могу использовать следующий код:

cat test | while read a b c d; do echo "$a:$b:$c:$d"; done

Чтобы быстро повторить то, что происходит выше.cat test | читает файл и передает его на while.while выполняет код между do и done, а read возвращает значение true.read читает строку из стандартного ввода и разделяет ее на переменные («a», «b», «c» и «d») в соответствии со значением $ IFS.Наконец, echo просто отображает переменные, которые мы читаем.

Что дает мне следующий вывод

X1:X2:X3:X4
Y1:Y2:Y3:Y4

Кстати, руководство BASH всегда хорошо читается.Вы узнаете что-то новое каждый раз, когда читаете это.

3 голосов
/ 14 декабря 2010

Поскольку эйканал упомянул AWk и sed, я подумал, что покажу, как вы можете их использовать.

awk -F, 'BEGIN{OFS="\n"}{$1=$1; print}' inputfile

или

sed 's/,/\n/' inputfile

Тогда сценарий оболочки может обработатьих вывод:

awk_or_sed_cmd | while read -r field
do
    do_something "$field"
done

Конечно, вы можете выполнить обработку в скрипте AWK:

awk -F, '{for (i=1;i<=NF;i++) do_something($i)}' inputfile
0 голосов
/ 22 апреля 2013

ls -l

vi filename.sh

#! Бен / ш

эхо "INPUT PATTERN"

кошка> тест (введите данные и сохраните их)

кошачий тест | во время чтения (ввод); (например: "$ a: $ b: $ c: $ d");

сделано

шаблон эха "показан как" $ a: $ b: $ c: $ d "\ n"

Выход (0;); * 1 018 *

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