На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
tmp13
Сообщения: 986
ОС: openSuse 11.2
Сообщение
tmp13 » 11.12.2009 17:47
файл test.txt
Код: Выделить всё
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
задача в 6 столбце добавить 0 в начало...
Код: Выделить всё
awk -F'|' '{ if (length($6)!=8) { sub($6,"0"$6,$6) }; sub($6,substr($6, 0, 2)"."substr($6, 3, 2)"."substr($6, 5, 4)); print }' test.txt
результат:
Код: Выделить всё
2345 lalalal vot tak 02032009 a 01.03.2009
12345 lalalal vot tak 03042009 a 01.04.2009
12345 lalalal vot tak 04052009 a 01.05.2009
12345 lalalal vot tak 05062009 a 01.06.2009
12345 lalalal vot tak 06072009 a 01.07.2009
куда то улетают все разделители(( что я делаю не так?
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows
Сообщение
allez » 11.12.2009 18:24
Разделители никуда не улетают. Просто awk не включает их в значения полей и это логично, не так ли? ;)
Поэтому, если вам нужны разделители в результатах работы awk, то придется явно указывать их в операторах вывода.
tmp13
Сообщения: 986
ОС: openSuse 11.2
Сообщение
tmp13 » 11.12.2009 18:50
э-э... об этом я тоже думал)
вообще проблемму решил так:
awk -F'|' '{ if (length($6)!=8) { sub($6,'0'$6) }; sub($6,substr($6, 0, 2)"."substr($6, 3, 2)"."substr($6, 5, 4)); print }' test.txt
решил правда методом тыка т.е. в sub где if
поменял
на
и всё заработало... как не знаю)) ура!
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
tmp13
Сообщения: 986
ОС: openSuse 11.2
Сообщение
tmp13 » 16.12.2009 17:03
в продолжение темы... предположим файл выглядит
12345|lalalal|vot tak|02032009|a|1032009
12345|lalalal|vot tak|03042009|a|
12345|lalalal|vot tak|04052009|a|1052009
12345|lalalal|vot tak|05062009|a|1062009
12345|lalalal|vot tak|06072009|a|1072009
вот так
в результате выполнения
awk -F'|' '{ if (length($6)!=8) { sub($6,'0'$6) }; sub($6,substr($6, 0, 2)"."substr($6, 3, 2)"."substr($6, 5, 4)); print }' test.txt
получаем
12345|lalalal|vot tak|02032009|a|01.03.2009
..012345|lalalal|vot tak|03042009|a|
12345|lalalal|vot tak|04052009|a|01.05.2009
12345|lalalal|vot tak|05062009|a|01.06.2009
12345|lalalal|vot tak|06072009|a|01.07.2009
совершенно не понятно каким макаром точки ушли в 1 столбец??
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE
Сообщение
t.t » 18.12.2009 13:13
Дата всегда в конце строки? Если так, то зачем упражняться со столбцами?
Код: Выделить всё
sed -r 's/([0-3][0-9])([0-1][0-9])([1-2][0-9]{3})$/\1.\2.\3/'
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
tmp13
Сообщения: 986
ОС: openSuse 11.2
Сообщение
tmp13 » 21.12.2009 14:03
нет дата где угодно...
переписал:
Код: Выделить всё
awk -F'|' '{ if (length($4)!=0) { if (length($4)!=8) { sub($4, '0'$4)}; sub($4,substr($4, 0, 2)"."substr($4, 3, 2)"."substr($4, 5, 4))}; print }' test.txt
вообщем данная проблемма с awk решена)
спасибо всем=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
tmp13
Сообщения: 986
ОС: openSuse 11.2
Сообщение
tmp13 » 25.01.2010 18:34
Поэтому, если вам нужны разделители в результатах работы awk, то придется явно указывать их в операторах вывода.
гммм и как их туда добавить?
Решено:
параметр OFS добавляет в вывод нужный разделитель.
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
smaharbA
Сообщения: 229
ОС: Windows Vista
Сообщение
smaharbA » 25.01.2010 20:16
Код: Выделить всё
awk -F'|' '{for (i=1;i<NF;i++) printf $i"|";printf "%08d\n", $NF | "cut -c 1-2,3-4,5- --output-delimiter=." }' ...
Я конечно далек от мысли...(с)