LINUX.ORG.RU

Преобразование строки

 


0

1

Доброго! Выдумывал название для темы, но так и не смог придумать, как объяснить, чего хочу, в двух словах, так что прошу простить.

Есть строки вида

field1;bla,fde,ghjk,lmn

Хочу привести их к виду

filed1;bla
field1;fde
field1;ghjk
filed1;lmn

Такое надо сделать только со строками, где второе поле(при разделителе точка с запятой) содержит множество значений, разделенных запятыми. Хотелось бы на awk, но устроит любой вариант. Спасибо!

Приходит в голову только резать строку на части, потом в цикле со второй части вычитывать значения и печатать их с первой рядом. Хочется по-умному.

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

Сюда просится какой-то вложенный цикл в awk да с разными разделителями. Или печать массива. Только к сожалению знаний ни на то, ни на это не хватает.

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

$ cat <<EOF | sed 's/\(\S*\);\(\S*\),\(\S*\),\(\S*\).*/\1;\2\n\1;\3\n\1;\4/g'
field1;bla,fde,ghjk,lmn
EOF

field1;bla,fde
field1;ghjk
field1;lmn
anonymous
()
Ответ на: комментарий от Silerus

Нужно раздербанить строку. Если во втором поле есть что-то, разделенное запятыми, нужно каждое из этого чего-то напечатать попарно с первым полем.

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

Сорян, забыл сказать, что число таких значений неизвестно.

Нужно преобразовать вывод tshark, примерно вот такой

1518046372.246663000;67334213
1518046372.328702000;67334214,67334215,67334216
1518046372.335228000;67334217,67416626

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

Спасибо! С учетом комментариев ниже, все работает, как задумано было.

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

А это, как я понимаю, тот самый вложенный цикл. Тебе тоже спасибо!

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

Не проверял, но одобряю. Тебе тоже спасибо. Как парсинг пройдет, проверю.

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