Правка файла, bash awk (скорость работы)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Правка файла, bash awk

Сообщение tmp13 »

Есть файл 600 мегов вида:

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

12345|lalalal|vot tak
12345|lalalal|vot tak
12345|lalalal|vot tak
12345|lalalal|vot tak
12345|lalalal|vot tak

необходимо привести к виду:

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

1|12345|lalalal|vot tak
2|12345|lalalal|vot tak
3|12345|lalalal|vot tak
4|12345|lalalal|vot tak
5|12345|lalalal|vot tak

на данный момент это реализованно так:

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

#!/bin/bash
i=1
while read line
do
        echo "$line" | awk '{print ("'$i'|" $0)}' >> test.txt.new
        ((i=i+1))
done<test.txt
exit 0;

в результате обработка 1 файла занимает около часа.
если забивать файл тупо 1 т.е. приводить к виду:

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

1|12345|lalalal|vot tak
1|12345|lalalal|vot tak
1|12345|lalalal|vot tak
1|12345|lalalal|vot tak
1|12345|lalalal|vot tak

командой:

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

cat test.txt | awk '{print ("1|" $0)}' > test.txt.new

это занимает секунд 20...
можно ли как то гмм оптимизировать процесс?
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

cat -n test.txt | sed 's/^ *\([0-9]*\) */\1|/' > test.txt.new
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

спасибо огромное=)
ни как руки и голова не дойдут до изучения sed и awk=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гммм не всё так хорошо оказалось)

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

648|12345|lalalal|vot tak
649|12345|lalalal|vot tak
650|12345|lalalal|vot tak
651|12345|lalalal|vot tak
652|12345|lalalal|vot tak

число соотетственно будет вычисляться заранее и записываться в переменную count предположим.
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

tmp13 писал(а):
19.11.2009 19:00
число соотетственно будет вычисляться заранее и записываться в переменную count предположим.

Не понял фразу. Какое число? Кем вычисляться?
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гмм проще говоря мне нужно начать нумерацию строк не с 1 а с 648.
всё спасибо переписал вот так:
cat -n test.txt|awk '{ sub($1, $1+648); print }'|sed 's/^ *\([0-9]+10*\) */\1|/'
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

tmp13 писал(а):
19.11.2009 19:11
гмм проще говоря мне нужно начать нумерацию строк не с 1 а с 648.

Тут сложнее. Можно, например, так:
paste -d '|' <(seq номер_первой_строки номер_последней_строки__его_нужно_вычислить) file.txt > file2.txt
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гммм уже заморочился на том что есть=))
пока что остановилось на

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

cat -n test.txt|awk '{ sub($1, $1+'$i'"|"); print }'|sed 's/^ *\([0-9]+10*\) */\1|/'

только там появляются пробелы(
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

tmp13 писал(а):
19.11.2009 20:13

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

cat -n test.txt|awk '{ sub($1, $1+'$i'"|"); print }'|sed 's/^ *\([0-9]+10*\) */\1|/'

??? Что за "+10" вы в sed добавили? это раз. И два - sed уже заменяет пробелы на '|', не надо это делать awk'ом.

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

cat -n test.txt|awk '{ sub($1, $1+'$i'" "); print }'|sed 's/^ *\([0-9]*\) */\1|/'


Upd: может, больше подойдёт такой вариант:
cat -n | awk '{ sub($1, $1+'10'" "); print }'|sed 's/^ *\([0-9]*\)[[:space:]]*/\1|/'
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

да работает спасибо=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Правка файла, bash awk

Сообщение sash-kan »

предлагаю оптимизацию:
N=647
cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/'
у первой строки будет номер $N+1

должно отработать быстрее. потому что исключён лишний фильтр (тот, что awk).

но вообще, можно из info sed взять пример реализации поведения «cat -n» и на его основе написать просто турбореактивное решение. главное — поменьше жадных квантификаторов! (улыбка)
в этом случае не потребутеся костыль для cat-а, формирующий пустые строчки. ладно, если их с десяток тысяч. а если миллионы?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

sash-kan писал(а):
22.11.2009 17:06
но вообще, можно из info sed взять пример реализации поведения «cat -n» и на его основе написать просто турбореактивное решение. главное — поменьше жадных квантификаторов! (улыбка)

Есть одно но: этот "пример реализации поведения «cat -n»" не то что турбореактивным, но даже просто быстрым не назовёшь. Хотя, возможно, это будет всё же быстрее, чем отсчитывать тысячи пустых строк... Надо проверить
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Правка файла, bash awk

Сообщение sash-kan »

извлёк.

N=648
sed -n 'x; /^$/ s/^.*$/'$N'/; G; h; s/^\(.*\)\n/\1|/p; g; s/\n.*$//; /^9*$/ s/^/0/; s/.9*$/x&/; h; s/^.*x//; y/0123456789/1234567890/; x; s/x.*$//; G; s/\n//; h' file.txt

строчки начинаются с номера N.

p.s. я специально пробелы пооставлял, чтоб хоть чуть-чуть ориентироваться можно было.

upd. да, турбореактивности явно не вышло. ну что ж, остаётся предыдущий вариант.

upd2. нет, конечно, проще всего воспользоваться sed-овским оператором =. но это будет, во-первых, два экземпляра sed, во-вторых, в два раза увеличится количество строк, передаваемых по пайпу. что-то мне подсказывает, что это будет значительно замедлять работу. но надо потестировать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

использование двух сед у меня было намного быстрее.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Правка файла, bash awk

Сообщение /dev/random »

+1.
И не надо бояться большого количества пайпов. Особенно на многоядерном процессоре, где оно вместо потери скорости может обеспечить её существенный прирост.
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гммм в принципе скорость устраивает=)
опробую

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

cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/'
-этот вариант +
тут возникла ещё одна вещь:
Есть файл 600 мегов вида:

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

12345|lalalal|vot tak|02032009|a
12345|lalalal|vot tak|03042009|a
12345|lalalal|vot tak|04052009|a
12345|lalalal|vot tak|05062009|a
12345|lalalal|vot tak|06072009|a

было бы здорово такой какой нить быстрой командой 4-тый элемент привести к виду 02.03.2009 и т.д

P.S в идеале конечно хотелось бы сделать сразу всё одной командой т.е и 1 столбец добавить и дату нормальную сделать

Update
сделал:

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

awk -F'|' '{ sub($4,substr($4, 0, 2)"."substr($4, 3, 2)"."substr($4, 5, 4)); print }' lalal.txt > TEST.txt

правда как приделать к первой ещё не понял

под конец дня чёт затупы идут

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

cat -n <(for (( i=1; i<=N; i++ )); do echo; done) lalal.txt | sed '1,'$N'd;s/^ *\([0-9]*\)[[:space:]]*/\1|/'|awk -F'|' '{ sub($4,substr($4, 0, 2)"."substr($4, 3, 2)"."substr($4, 5, 4)); print }'>klmn.txt

всё гуд!) правда вернул опять awk но видимо судьба у него такая=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

tmp13 писал(а):
02.12.2009 17:33
в идеале конечно хотелось бы

чего?

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

$ sed -r 's/([^|]+\|){3}([^|]+).*/\2/;s/..../&./;s/../&./'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

Да sed круто) с
awk -F'|' '{ sub($4,substr($4, 0, 2)"."substr($4, 3, 2)"."substr($4, 5, 4)); print }

ни фига не понятно сообенно если добавить ещё одну дату...

в идеале конечно хотелось бы

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

cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/' | sed -r 's/([^|]+\|){4}([^|]+).*/\2/;s/..../&./;s/../&./'

выводит только 4...
хотелось бы все столбцы
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

sash-kan писал(а):
22.11.2009 17:06
но вообще, можно из info sed взять пример реализации поведения «cat -n» и на его основе написать просто турбореактивное решение.
там быстрый пример на другую тему. можно быстро посчитать строки, можно их даже быстро вывести, но... только в позиционной системе счисления
tmp13 писал(а):
08.12.2009 17:49
выводит только 4...

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

$ sed -r 's/^(([^|]+\|){3})([0-9]{2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/' t.txt
12345|lalalal|vot tak|02.03.2009|a
12345|lalalal|vot tak|03.04.2009|a
12345|lalalal|vot tak|04.05.2009|a
12345|lalalal|vot tak|05.06.2009|a
12345|lalalal|vot tak|06.07.2009|a
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гммм

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

12345|lalalal|vot tak|02032009|a|1032009
12345|lalalal|vot tak|03042009|a|1042009
12345|lalalal|vot tak|04052009|a|1052009
12345|lalalal|vot tak|05062009|a|1062009
12345|lalalal|vot tak|06072009|a|1072009

проблемма в том что дата может быть ещё в одном столбце и выглядить вот как я написал в последнем.\
Через awk переделывал как:

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

awk -F'|' '{ if (length($4)!=8) { gsub($4, "0"'0'+$4)}; gsub($4,substr($4, 0, 2)"."substr($4, 3, 2)"."substr($4, 5, 4)); print }'

но проблемма в том что это хорошо когда дата одна.. когда разная то при попытке добавить

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

 gsub($5, "0"'0'+$5)}; gsub($5,substr($5, 0, 2)"."substr($5, 3, 2)"."substr($5, 5, 4)); print

всё это дело ломалось...
так же как и при использовании sub... читал так и не понял почему... т.е. точки появлялись в вообще уму не поддающихся местах...
мб я там в добавлением 0 перемудрил...
но в случае одинаковой даты всё было здорово... почитал так не особо понятно реально ли реализовать это sed`ом..
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

tmp13 писал(а):
11.12.2009 16:49
почитал так не особо понятно реально ли реализовать это sed`ом.

реально. дайте всё-же файл (который надо обработать).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

не могу расспространять гмм эти файлы...=) могу дать модифиированную строчку 1 и весь файл забит такими строчками...

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

120547378|110008|9022007|O|C|L|S|S| |                    |LALALALAL|PAMPAMAPMAMAAP|            |ZZZZZZZZZZZZ|RRRRR|KLMNKLMNKLMN |2,75|234234|0|234234|234234234234|9022007|0|9022007|2,75|N|0|1W          |0||N|0|0||7|||||122617|

как видно дата находится в 3х местах и может быть разной тут везде "9022007"
я вообщем то вроде разобрался как сделать на awk=)
P.S я читаю ваш учебник по sed=))
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

tmp13 писал(а):
14.12.2009 18:26
120547378|110008|9022007|O|C|L|S|S| | |LALALALAL|PAMPAMAPMAMAAP| |ZZZZZZZZZZZZ|RRRRR|KLMNKLMNKLMN |2,75|234234|0|234234|234234234234|9022007|0|9022007|2,75|N|0|1W |0||N|0|0||7|||||122617|

это 3 строки?
дата всегда подходит под

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

/|[123]?[0-9][01][0-9]20[0-9]{2}|/

это в общем-то и ответ...
достаточно расставить скобки и приписать выражение для замены...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

это одна строка!)
для меня на данный момент sed тёмный лес)
поэтому основываясь на том что тут было предложенно я пытаюсь все эти команды свести в одну
т.е.

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

cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/'
(т.е. добавление номера строки)

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

sed -r 's/^(([^|]+\|){3})([0-9]{2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/'
(замена дат)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

tmp13 писал(а):
14.12.2009 18:51
cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/'

не очень понял зачем тут цикл и cat -n.
tmp13 писал(а):
14.12.2009 18:51
sed -r 's/^(([^|]+\|){3})([0-9]{2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/'

а что не так? это не работает?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

cat -n <(for (( i=1; i<=N; i++ )); do echo; done) test.txt | sed '1,'$N'd;s/^ *\([0-9]*\) */\1|/' - это добавляет номер
можно конечно сделать в две команды
1. добавить номер
2. поправить даты

Цитата(tmp13 @ 14th December 2009 - в 20:51) *
sed -r 's/^(([^|]+\|){3})([0-9]{2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/'

а что не так? это не работает?

не работает. видимо потому что дата выглядит так: 9022007, а не так: 09022007
вообще лучше переделать приведённую мною строчку как
120547378|110008|9022007|O|C|L|S|S| | |LALALALAL|PAMPAMAPMAMAAP| |ZZZZZZZZZZZZ|RRRRR|KLMNKLMNKLMN |2,75|234234|0|234234|234234234234|19022007|0|3022012|2,75|N|0|1W |0||N|0|0||7|||||122617|

так сказать для чистоты эксперемента..
ибо в зависимости от даты она либо 8-ми значная либо 7-ми.
т.е. 7-ми значная с 1 по 9 число дальше 8-ми... опять же я не знаю как к этому относится sed)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

tmp13 писал(а):
14.12.2009 19:35
sed -r 's/^(([^|]+\|){3})([0-9]{2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/'

tmp13 писал(а):
14.12.2009 19:35
не работает. видимо потому что дата выглядит так: 9022007, а не так: 09022007

смените выделенную двойку на {1,2}
tmp13 писал(а):
14.12.2009 19:35
ибо в зависимости от даты она либо 8-ми значная либо 7-ми.
т.е. 7-ми значная с 1 по 9 число дальше 8-ми... опять же я не знаю как к этому относится sed)

нормально относится.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

drBatty писал(а):
15.12.2009 11:28
09022007

[0-3]?[0-9][01][0-9]20[0-9]{2}
должно работать до 31го декабря 2099го года
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Правка файла, bash awk

Сообщение tmp13 »

гммм т.е. sed -r 's/^(([^|]+\|){2})([0-9]{1,2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/' test.txt
в котором
120547378|110008|9022007|O|C|L|S|S| | |LALALALAL|PAMPAMAPMAMAAP| |ZZZZZZZZZZZZ|RRRRR|KLMNKLMNKLMN |2,75|234234|0|234234|234234234234|19022007|0|3022012|2,75|N|0|1W |0||N|0|0||7|||||122617|
?
в результате в 3 поле дата выглядит как 9.02.2007 а необходимо 09.02.2007
+ как я понял первая цифра это номер поля
sed -r 's/^(([^|]+\|){22})([0-9]{1,2})([0-9]{2})([0-9]{4})(.*)/\1\3.\4.\5\6/' в 22 поле чёт ни чего не меняется...
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Правка файла, bash awk

Сообщение drBatty »

drBatty писал(а):
15.12.2009 12:03
[0-3]?[0-9][01][0-9]20[0-9]{2}

tmp13 писал(а):
16.12.2009 17:01
/^(([^|]+\|){2})([0-9]{1,2})([0-9]{2})([0-9]{4})(.*)/

не вижу ничего похожего.
ну выделяет {1,2} один или два выделенных метасимвола (цифры)
tmp13 писал(а):
16.12.2009 17:01
в результате в 3 поле дата выглядит как 9.02.2007 а необходимо 09.02.2007

tmp13 писал(а):
16.12.2009 17:01
9022007

ну дык оно так выглядит. оно такое (между прочим) и есть.
В принципе, если вам это необходимо, добавте ведущий ноль перед цифрой если его там нет.
наверное проще всего
1) сначала выделить все даты и разделить их символом \n
2) затем в начале любой строки, которая начинается на /[1-9]\./ дописать нолик сначала. (нужн использовать модификатор m к команде s, что-бы поменялись все строчки)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: