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