LINUX.ORG.RU

Как распарсить строку через awk

 , ,


0

1

Как распарсить строку, не могу понять. Только начинаю знакомиться с Linux и ее стандартными инструментами. Пытаюсь это сделать через awk. Строка вида:

Продовольственные товары,Свинина (кроме бескостного мяса),«6,32»,«5,95»,«5,96»,«5,89»,«6,36»,«6,51»,«6,37»

Продовольственные товары,«Куры (цыплята, включая бройлеров)»,«3,49»,«3,73»,«3,7»,«3,7»,«3,69»,«3,69»,«3,73»

Из нее достать названия и цены по полям, для дальнейшей обработки. Не могу понять, как правильно разделитель указать. Разделитель здесь запятая, но как видно она встречается и в самой строке. там где в строке запятая, строка дополнительно заключается в кавычки. Помогите, как правильно распарсить в данном случае?



Последнее исправление: rakuz (всего исправлений: 1)

Покажи, что ты делал, и как именно оно у тебя не получается.

mord0d ★★★★★
()

Конкретную цель опиши. Потому что под «распарсить» можно много чего понять.

anonymous
()

И вообще для таких целей sed есть.

anonymous
()

Вот строка для примера: Продовольственные товары,Свинина (кроме бескостного мяса),«6,32»,«5,95»,«5,96»,«5,89»,«6,36»,«6,51»,«6,37»

Продовольственные товары,«Куры (цыплята, включая бройлеров)»,«3,49»,«3,73»,«3,7»,«3,7»,«3,69»,«3,69»,«3,73»

Из нее достать названия и цены по полям, для дальнейшей обработки. Не могу понять, как правильно разделитель указать.

rakuz
() автор топика

Это CSV. Может быть проще использовать что-то вроде этого.

xaizek ★★★★★
()
Ответ на: комментарий от rakuz
#!/bin/awk -f
BEGIN { FS="\"" }
{ if(NF>=15) { for(i=NF-13;i<=NF;i+=2) printf("%s ", $i); printf("\n"); }}
$ cat t.txt
Продовольственные товары,Свинина (кроме бескостного мяса),"6,32","5,95","5,96","5,89","6,36","6,51","6,37"
Продовольственные товары,"Куры (цыплята, включая бройлеров)","3,49","3,73","3,7","3,7","3,69","3,69","3,73"
$ t.awk < t.txt
6,32 5,95 5,96 5,89 6,36 6,51 6,37 
3,49 3,73 3,7 3,7 3,69 3,69 3,73 
vodz ★★★★★
()

Это формат csv, не стоит разбирать его средствами шелла. Используй питон/перл/другой язык умеющий в парсинг csv по вкусу.

Deleted
()

Нужно именно средствами баша. Сделал вроде решение. Но появилась прблема, при попытке добавить запятую в конец строки чтобы соответствовало моему шаблону, эта запятая добавляется вместо первого символа. Не могу понять почему. В чем может быть причина?

rakuz
() автор топика
Ответ на: комментарий от rakuz

sed 's/$/\,/' file

добавляю таким образом символ, должно получится:

Продовольственные товары,Свинина (кроме бескостного мяса),«6,32»,«5,95»,«5,96»,«5,89»,«6,36»,«6,51»,«6,37»,

а получается

,родовольственные товары,Свинина (кроме бескостного мяса),«6,32»,«5,95»,«5,96»,«5,89»,«6,36»,«6,51»,«6,37»

Почему так?

rakuz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.