Страница 1 из 2
Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:34:19
levantuev
есть строка:
как выдернуть оттуда 1378811
Или как присвоить результат команды
в sh скрипте в качестве переменной
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:45:39
gloom
Код: Выделить всё
netstat -r | awk '/default/ { print $5 }' |xargs proga
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:46:42
gloom
первое awk решает
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:52:35
levantuev
xargs: proga: No such file or directory
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:54:55
gloom
proga ето та команда которой передать параметры надо
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 20:59:21
levantuev
netstat -r | awk '/default/ { print $5 }' | xargs $a - так?
Приношу извинения за свою неграмотность, не могли бы вы пример привести
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:06:10
gloom
netstat -r | awk '/default/ { print $5 }' | xargs прогакоторойпередатьпеременную
еси ето перловый скрипт blabla.pl то пишете
netstat -r | awk '/default/ { print $5 }' | xargs blabla.pl
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:09:20
levantuev
а если у меня sh скрипт и переменную нужно передать в тот файл в котором выполняется скрипт
Код: Выделить всё
netstat -r | awk '/default/ { print $5 }' | xargs x.sh
а где имя переменной в качестве, которой передается в файл?
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:13:39
gloom
нету тут переменных
хотя-бы попытайтесь почитать man xargs
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:23:12
paradox
Код: Выделить всё
peremennaya_plat="netstat -r | awk '/default/ { print $5 }' "
как то так)))
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:24:10
gloom
paradox писал(а):Код: Выделить всё
peremennaya_plat="netstat -r | awk '/default/ { print $5 }' "
как то так)))
тогда не в одну строку

Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:25:27
paradox
в одну строку тоже должно работать
токо я не помню как правильно екранировать
двумя " или одинарной '
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:35:08
gloom
echo `netstat -r | awk '/default/ { print $5 }' `
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 21:56:39
Гость
paradox писал(а):Код: Выделить всё
peremennaya_plat="netstat -r | awk '/default/ { print $5 }' "
как то так)))
Код: Выделить всё
peremennaya_plat=$(netstat -r | awk '/default/ { print $5 }' )
или
Код: Выделить всё
peremennaya_plat=`netstat -r | awk '/default/ { print $5 }' `
второй вариант не умеет вложения, напр. $(...$(...$(...) ) )
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-28 22:00:02
levantuev
спасибо, а еще доп.вопрос, как полученное число например: 4924079 , разделить пробелами, что бы получилось вроде этого: 4 924 079
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-29 17:30:10
Гость
levantuev писал(а):спасибо, а еще доп.вопрос, как полученное число например: 4924079 , разделить пробелами, что бы получилось вроде этого: 4 924 079
через localeconv(3) устроит[1]?
Код: Выделить всё
$ echo 4924079 | LC_NUMERIC=ru_RU.UTF-8 awk '{ printf ("%'"\'"'d\n", $0) }'
4 924 079
вместо
echo подставь команду, коя генерирует число на stdout
LC_NUMERIC можно не указывать, если у тебя стоит русская локаль в LANG. Если использовать локаль en_US, то разделение будет запятыми, а не пробелами.
[1] см. printf(3),
%'dprintf(3) писал(а): - `''
- Decimal conversions (d, u, or i) or the integral portion
of a floating point conversion (f or F) should be
grouped and separated by thousands using the non-mone-
tary separator returned by localeconv(3).
если я не оишбаюсь, этот способ используется и при `sysctl -h'
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-29 17:39:09
gloom
Гость писал(а):Код: Выделить всё
$ echo 4924079 | LC_NUMERIC=ru_RU.UTF-8 awk '{ printf ("%'"\'"'d\n", $0) }'
под линей не пашет
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-29 18:21:33
Гость
gloom писал(а):под линей не пашет
должно, там обычно стоит
lang/gawk на месте awk'а (во FreeBSD используется nawk)
Код: Выделить всё
$ echo 4924079 | LC_NUMERIC=ru_RU.UTF-8 gawk '{ printf ("%'"\'"'d\n", $0) }'
gawk: warning: escape sequence `\'' treated as plain `''
4 924 079
Однако на некоторых Лялихах используется ru_RU.utf8 вместо ru_RU.UTF-8. Попробуй поэксперементировать с локалями.
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 4:07:10
levantuev
а как доделать так:
если число 6 748 525 , то автоматически пишет 6.7 Гбайт,
если число 755 087 , то пишет 755 Кбайт
если число 378 , то пишет 378 Байт
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 14:15:16
Гость
levantuev, заюзать
humanize_number(3) или считать вручную с помощью awk(1)
Код: Выделить всё
#! /bin/sh
echo '
3000000000
6748525
755087
378
' |
awk -v OFMT=%.1f '
BEGIN {
h[1] = "Ki"
h[2] = "Mi"
h[3] = "Gi"
h[4] = "Ti"
}
/[[:digit:]]/ {
n=$0
for(i = 0; n > 2^10; i++) {
n /= 2^10
}
if(n > 10)
n = int(n)
print n, h[i] "B"
}
'
сие можно уместить и в одну строку, воспользовавшись разделителем `
;', но будет нечитабельно.
Касательно бинарного префикса (`Ki', а не `K')
w:Binary prefix писал(а):Most Unix-like systems which use the ls command to display file sizes use powers of 1024 indicated as KB/MB. In Linux, the directory listing tool (ls) has options for decimal file size listings. Microsoft Windows reports file sizes using prefixes in binary meaning but does not use IEC standard prefixes. Prior to Snow Leopard, Apple's Mac OS X reported file sizes in the same way. Since Snow Leopard, file sizes are reported in decimal units.
Т.е. никто не использует SI-приставки для подсчета байтов.
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 14:33:02
levantuev
в данном примере байты в Кбайты, Мбайты, Гбайты переводятся, а как сделать что бы Кбайты в Мегабайты и Гигабайты переводило? пробовал экспериментировать с числом 10, не получается
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 15:24:25
Гость
levantuev, достаточно чуток поправить скрипт
Код: Выделить всё
#! /usr/bin/awk -f
BEGIN {
OFMT = "%.1f"
split("Ki:Mi:Gi:Ti:Pi:Ei:Zi:Yi", h, ":")
}
/^[[:digit:]]+$/ {
n=$0
for(i = 0; n > 2^10; i++)
n /= 2^10
if(n > 10)
n = int(n)
print n, h[i] "B"
}
/[[:digit:]]+ [[:alpha:]]*B$/ {
n=$1
s=$2
sub("B$", "", s)
for(i = 0; i <= 4; i++)
if(s == h[i])
print n * 2^(10 * i)
}
Код: Выделить всё
$ echo 3000000000 | ./a.awk
2.8 GiB
$ echo 2.8 GiB | ./a.awk
3006477107.2
$ printf "6.4 MiB\n737 KiB\n378 B\n" | ./a.awk
6710886.4
754688
378
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 17:59:24
levantuev
10634128 - данное число должно выдавать 10 Гбайт ну или что то приблизительное
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 19:08:15
Гость
levantuev писал(а):10634128 - данное число должно выдавать 10 Гбайт ну или что то приблизительное
пардон? ты считаешь не в байтах? или не видел табличку по ссылке на википедию, кою я выше приводил?
Gi = 2 ^ 30 = 1 073 741 824; G = 1 000 000 000
Mi = 2 ^ 20 = 1 048 576; M = 1 000 000
Ki = 2 ^ 10 = 1 024; K = 1 000
http://en.wikipedia.org/wiki/Binary_prefix#Prefixes
Эти приставки могут использоваться для любых величин, не только для байтов или метров.
Отсюда вопрос: 10 634 128 - это величина в байтах или
килобайтах?
Re: Присвоение результата команды в качестве переменной
Добавлено: 2009-10-30 19:39:52
levantuev
извиняюсь, килобайтах