Страница 1 из 1

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

Добавлено: 2011-02-18 12:00:05
mmvds
Помогите пожалуйста с простым скриптом
Есть файл, у которого в качестве разделителей несколько пробелов, необходимо их заменить на 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:
в регулярках к сожалению, не особо силен

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

Добавлено: 2011-02-18 12:41:39
hizel

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

cat file1 | awk '$1=$1' > file2

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

Добавлено: 2011-02-18 12:43:29
Bayerische
Excel нельзя запрячь?

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

Добавлено: 2011-02-18 12:45:21
mmvds
hizel, Большое спасибо

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

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

Добавлено: 2011-02-18 18:37:11
kpp
Если все-таки нужно заменить разделитель (с пробела на двоеточие), то можно так:

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

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

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

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

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

cat file_in | ...

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

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

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

Добавлено: 2011-02-19 11:20:45
x6e6564
отсюда же http://forum.lissyara.su/viewtopic.php?f=32&t=28194

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

sed 's/\ \{1,\}/:/g' ~/test.txt

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

Добавлено: 2011-02-23 11:55:28
kpp
Немного модифицированный вариант от товарища hizel

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

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

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

Добавлено: 2011-02-23 15:56:08
hizel
я тоже не в курсе, гугл предложил такой вариант :pardon:

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

Добавлено: 2011-02-24 12:25:35
kpp
Еще способ:

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

cat $1 | tr -s "\t " ":"