Обработать .csv из командной строки

Andrew Bondarenko bond на relex.ru
Вт Авг 10 17:42:50 BST 2010


On 08/10/2010 08:31 PM, Людмила Бандурина wrote:
> 10 августа 2010 г. 20:22 пользователь Andrew Bondarenko <bond на relex.ru
> <mailto:bond на relex.ru>> написал:
>
>     On 08/10/2010 08:17 PM, Andrew Bondarenko wrote:
>      > On 08/10/2010 08:02 PM, Людмила Бандурина wrote:
>      >> Здравствуйте,
>      >>
>      >> Посоветуйте, пожалуйста, способ обработать .csv
>      >>
>      >> Имеется:
>      >>
>      >> "name1","name_eng1","code1","shortCode1"
>      >> "name2","name_eng2","code2","shortCode2"
>      >>
>      >> И так далее, таких строк очень много
>      >>
>      >> Нужно получить:
>      >>
>      >> "name1", "name2", "name3", "name4", "name5", "name6", "name7",
>     "name8",
>      >> "name9", "name10", "name11", "name12", "name13", "name14", "name15",
>      >> "name16",
>      >>
>      >> И так далее - по 8 в строке, только первое поле из имеющихся в .csv
>      >> Или хотя бы в одну строку - но только первое поле.
>      >> Кавчки есть во входном файле, они должны быть и в выходном файле.
>      >>
>      >> Я пока совсем не знаю bash, даже на таком уровне...
>      >>
>      >
>      > Дак це ж гавка! =)
>      >
>      >
>      > awk -F',' ' BEGIN { current=1 } { if (current<8) { printf $1"," ;
>      > current++ ; } else { print $1"," ; current=1 ; } } ' infile
>      >
>      >
>      > где infile, как Вы понимаете, входной файл
>      >
>      >
>
>     хм... присмотрелся к "Нужно получить", у Вас там пробелы ещё, если
>     синтаксис гавки непонятен, то это будет так:
>
>     awk -F',' ' BEGIN { current=1 } { if (current<8) { printf $1", " ;
>     current++ ; } else { print $1", " ; current=1 ; } } ' infile
>
>
>     а что бы "хотя бы в одну строку" - это совсем просто:
>
>     awk -F',' ' { printf $1", " } ' infile
>
>     Всегда можете обратиться за пояснениями ;)
>
>
>     --
>     ubuntu-ru mailing list
>     ubuntu-ru на lists.ubuntu.com <mailto:ubuntu-ru на lists.ubuntu.com>
>     https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru
>
>
> Обращаюсь за пояснением. Где здесь имя входного файла? А где имя файла
> на выходе?
>
> --
> С уважением, Людмила
>

имя входного файла - последний параметр, в моем примере "infile"
Можно также использовать "конвейер", то есть отдавать содержимое файла 
на вход awk:

cat infile | awk -F ',' ' { ПРОГРАММА }'

выходной файл - стандартный вывод, то есть распечатает на экран. Именно 
файл всегда можно создать стандартными средствами, то есть 
перенаправлением вывода:

cat ВХОДНОЙ_ФАЙЛ | awk -F ',' ' { ПРОГРАММА }' > ВЫХОДНОЙ_ФАЙЛ





Подробная информация о списке рассылки ubuntu-ru