Замена нескольких пробелов на 1 символ sed

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mmvds
мл. сержант
Сообщения: 92
Зарегистрирован: 2011-01-26 17:24:07

Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение mmvds » 2011-02-18 12:00:05

Помогите пожалуйста с простым скриптом
Есть файл, у которого в качестве разделителей несколько пробелов, необходимо их заменить на 1 разделитель, например

Код: Выделить всё

109.234.155.198  10.197.48.197    6     80       3721     580         6
10.197.48.197    109.234.155.198  6     3721     80       640         8
10.197.183.198   93.120.245.226   6     2017     19195    40          1
необходимо превратить в

Код: Выделить всё

109.234.155.198:10.197.48.197:6:80:3721:580:6
10.197.48.197:109.234.155.198:6:3721:80:640:8
10.197.183.198:93.120.245.226:6: 2017:19195:40:1
пробовал так:

Код: Выделить всё

sed 's/[ ]*/:/g' file1 > file2
(глобальная замена любого кол-ва пробелов символом ":" )
но получаю вот:

Код: Выделить всё

:1:0:9:.:2:3:4:.:1:5:5:.:1:9:8:1:0:.:1:9:7:.:4:8:.:1:9:7:6:8:0:3:7:2:1:5:8:0:6:
:1:0:.:1:9:7:.:4:8:.:1:9:7:1:0:9:.:2:3:4:.:1:5:5:.:1:9:8:6:3:7:2:1:8:0:6:4:0:8:
:1:0:.:1:9:7:.:1:8:3:.:1:9:8:9:3:.:1:2:0:.:2:4:5:.:2:2:6:6:2:0:1:7:1:9:1:9:5:4:0:
в регулярках к сожалению, не особо силен

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение hizel » 2011-02-18 12:41:39

Код: Выделить всё

cat file1 | awk '$1=$1' > file2
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение Bayerische » 2011-02-18 12:43:29

Excel нельзя запрячь?

mmvds
мл. сержант
Сообщения: 92
Зарегистрирован: 2011-01-26 17:24:07

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение mmvds » 2011-02-18 12:45:21

hizel, Большое спасибо

Excel нельзя запрячь?
файл 80МБ и с ним потом еще колдовать и колдовать

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение kpp » 2011-02-18 18:37:11

Если все-таки нужно заменить разделитель (с пробела на двоеточие), то можно так:

Код: Выделить всё

awk 'BEGIN {OFS=":"} {print $1,$2,$3,$4,$5,$6,$7}' < file_in > file_out
Вариант с

Код: Выделить всё

... < file_in
более предпочтителен по быстродействию чем

Код: Выделить всё

cat file_in | ...
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение Bayerische » 2011-02-18 19:49:13

mmvds писал(а):файл 80МБ и с ним потом еще колдовать и колдовать
Ну, если это проблема... А так Эксель легко вертит разделителями CSV. Если же окромя прочего ещё что-то надо сделать с форматированием, я бы на AutoIT наваял. С парсингом у него полный порядок, проверено в боевых условиях.


kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение kpp » 2011-02-23 11:55:28

Немного модифицированный вариант от товарища hizel

Код: Выделить всё

awk 'BEGIN {OFS=":"} $1=$1' $1
Правда пока в упор не могу понять почему так срабатывает awk (переформатирует ВСЕ поля строки) при указании шаблона $1=$1. :pardon:
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение hizel » 2011-02-23 15:56:08

я тоже не в курсе, гугл предложил такой вариант :pardon:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Замена нескольких пробелов на 1 символ sed

Непрочитанное сообщение kpp » 2011-02-24 12:25:35

Еще способ:

Код: Выделить всё

cat $1 | tr -s "\t " ":"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.