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

Сергей Блохин sblohin на yandex.ru
Вт Авг 10 17:59:58 BST 2010


Опять отправил, не дописав...
Также порекомендую, по возможности, прочитать хорошую книгу http://www.opennet.ru/docs/RUS/bash_scripting_guide/ :)

10.08.2010, 20:54, "Сергей Блохин" <sblohin на yandex.ru>:
> # awk -- это команда (программа), точнее микроязык для работы с текстом.
> # -F -- аргумент, который задаёт разделитель. В твоём случае -- это запятая. Если не указывать разделитель, то по умолчанию им будет пробел.
> # {printf $1", "} -- код языка awk. В данном случае он выводит первый столбец (до разделителя "запятая") и после него выводит запятую и пробел
> # infile -- имя входного файла (.csv).
> awk -F',' '{printf $1", "}' infile
>
> Выходной же файл не создаётся, а результат работы awk выводится в stdout, т. е. в консоль.
> Ты можешь указать нужный тебе выходной файл, если в конце (после infile) допишешь > outfile.
>
> Общий принцип таких программ простой. Если им жёстко не заданы входные и выходные файлы, то они берут данные из stdin и отдают их в stdout (консоль).
> Например, можно сделать так:
> 1. cat infile | awk # будет обработан файл infile, а результат выведен в консоль
> 2. cat infile | awk > outfile # будет обработа файл infile, а результат записан в outfile
> 3. awk infile > outfile # # будет обработан файл infile, а результат выведен в консоль
> и т. д.
>
> 10.08.2010, 20:31, "Людмила Бандурина" <bigdogs.ru на gmail.com>:
>
>>  10 августа 2010 г. 20:22 пользователь Andrew Bondarenko <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
>>>  https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru
>>  Обращаюсь за пояснением. Где здесь имя входного файла? А где имя файла на выходе?
>>
>>  --
>>  С уважением, Людмила
>>  --
>>  ubuntu-ru mailing list
>>  ubuntu-ru на lists.ubuntu.com
>>  https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru



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