Модератор: Модераторы разделов
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo
Сообщение
pas » 21.10.2007 17:19
Есть текстовый файл примерного содержимого:
user: 1
size: 665486
pas 665486 65 1890
Необходимо при выводе файла на консоль разделить разряды чисел. Например из 665486 сделать 665_486.
Возможно ли это при помощи стандартных средств баша (или стандартных прог типа cat).
Если возможно подскажите в какую сторону копать.
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux
Сообщение
v04bvs » 21.10.2007 17:30
pas писал(а): ↑ 21.10.2007 17:19
Есть текстовый файл примерного содержимого:
user: 1
size: 665486
pas 665486 65 1890
Необходимо при выводе файла на консоль разделить разряды чисел. Например из 665486 сделать 665_486.
Возможно ли это при помощи стандартных средств баша (или стандартных прог типа cat).
Если возможно подскажите в какую сторону копать.
Я бы это сделал на перле. Может быть можно на sed или awk извернуться.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 21.10.2007 18:36
Фридл, Регулярные выражения, 2-е издание, стр.79-86
$ cat /tmp/0
user: 1
size: 665486
pas 665486 65 1890
$ cat /tmp/0|perl -pe 's/(?<=\d)(?=(?:\d\d\d)+(?: |_|$))/_/g'
user: 1
size: 665_486
pas 665_486 65 1_890
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo
Сообщение
pas » 21.10.2007 21:48
Спасибо за ответы.
Вобщем после некоторых изысканий пришел в следующему варианту
Код:
#!/bin/bash
time=`date "+%H:%M:%S"`
data=`date "+%d.%m.%Y"`
echo Статистика потребления за сегодня $data на $time
data=`date "+%Y%m%d"`
/var/www/cgi-bin/lightsquid/lightparser.pl
cat /var/www/html/lightsquid/report/$data/.total>/home/pas/macro/total.txt
SIZE=$(egrep "^size:" /home/pas/macro/total.txt|cut -d : -f2)
size_pas=$(egrep "^pas" /home/pas/macro/total.txt)
size_nata=$(egrep "^nata" /home/pas/macro/total.txt)
echo $size_pas>/home/pas/macro/totl
echo $size_nata>>/home/pas/macro/totl
sed 's/ /:/g' /home/pas/macro/totl>/home/pas/macro/totl2
size_pas=$(egrep "^pas:" /home/pas/macro/totl2|cut -d : -f2)
size_nata=$(egrep "^nata:" /home/pas/macro/totl2|cut -d : -f2)
if !($SIZE) then humsize=$(echo 'printf("%.2f\n",' $SIZE '/1024/1024);'|perl -); else humsize=0; fi
if !($size_pas) then humpas=$(echo 'printf("%.2f\n",' $size_pas '/1024/1024);'|perl -); else humpas=0; fi
if !($size_nata) then humnata=$(echo 'printf("%.2f\n",' $size_nata '/1024/1024);'|perl -); else humnata=0; fi
echo Всего $humsize мегабайт
echo -----------------------------------------
echo '|' Получено " "'|' Пользователь " "'|'
echo -----------------------------------------
echo '|' $humpas мегабайт " "'|' pas" "'|'
echo -----------------------------------------
echo '|' $humnata мегабайт " "'|' nata" "'|'
echo -----------------------------------------
Он конечно не идеален, но пока работает
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 21.10.2007 22:16
pas писал(а): ↑ 21.10.2007 21:48
Вобщем после некоторых изысканий пришел в следующему варианту
Вы темой случайно, не ошиблись? (:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo
Сообщение
pas » 22.10.2007 04:37
Да вроде нет. Правда в результате я получаю число мегабайт, вместо байт с разделенными разрядами, но просто вначале показалось, что разделить разряды бедет достаточно.