Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: NoWin 06 Listopadu 2009, 04:34:07

Název: Něco pro SEDaře [vyřešeno]
Přispěvatel: NoWin 06 Listopadu 2009, 04:34:07
Nazdar,
potřebuju seda přemluvit k tomu, aby mi výraz ACTIVE_CONSOLES="/dev/tty[1-n]" (kde n je číslo 3-9) převedl na ACTIVE_CONSOLES="/dev/tty[1-2]"
Kdyby tam nebyly ty hranatý závorky, tak si s tím tak nějak poradím, ale vůbec nevím, čím je nahradit/obohatit, aby mě to poslechlo.

EDIT:

Tak nic...
Kód: [Vybrat]
sed 's/^ACTIVE_CONSOLES="\/dev\/tty\[1-[3-9]\]"/ACTIVE_CONSOLES="\/dev\/tty[1-2]"/g' :)
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: nettezzaumana 06 Listopadu 2009, 16:46:48
Kód: (??) [Vybrat]
$ echo 'ACTIVE_CONSOLES="/dev/tty[1-4]"' | sed 's/\(^.[^[]*\)\[1-[3-9]\].*/\1[1-2]"/'
ACTIVE_CONSOLES="/dev/tty[1-2]"
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: NoWin 06 Listopadu 2009, 19:16:58
Kód: (??) [Vybrat]
$ echo 'ACTIVE_CONSOLES="/dev/tty[1-4]"' | sed 's/\(^.[^[]*\)\[1-[3-9]\].*/\1[1-2]"/'
ACTIVE_CONSOLES="/dev/tty[1-2]"
Díky, taky funguje!

Ale přece jen si s něčím nevím rady- potřebuju, aby z příkazu free -m | grep "Mem:" vylezlo místo:
Kód: [Vybrat]
Mem:          2025       1179        845          0        109        714

pouze tohle:
Kód: [Vybrat]
2025Mezery mezi jednotlivýma položkama byly nejspíš vytvořeny tabulátorem, teď to jsou obyčejný mezery, jejichž počet může bejt variabilní, dejme tomu 1-8, respektive 1-16. Potřebuju z toho vyloudit jen jediný číslo (velikost RAM v MiB), jehož hodnota i dýlka bude taky variabilní.
Chci to do svýho prográmku, ten mimo jiný bude strojům na základě velikosti RAM nastavovat hodnotu vm_swappiness ;)
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: premet 06 Listopadu 2009, 19:19:59
Jestli je to pořád ve stejným formátu, jen jiný hodnoty tak awk  :).

Kód: [Vybrat]
echo "Mem:       2074012    1204944     869068          0     110460     731436" | awk '{print $2}'
Kód: [Vybrat]
2074012
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: NoWin 06 Listopadu 2009, 19:23:51
Jestli je to pořád ve stejným formátu, jen jiný hodnoty tak awk  :).

Kód: [Vybrat]
echo "Mem:       2074012    1204944     869068          0     110460     731436" | awk '{print $2}'
Kód: [Vybrat]
2074012
Jé, díky!
Mezitím jsem sice změnil kilo za mega (zbytečně moc čísel), ale funguje to, navíc geniálně jednoduše!

Díky moc! ;)

free -m | grep "Mem:" | awk '{print $2}'
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: nettezzaumana 06 Listopadu 2009, 21:58:20
umh. konceptualne spatne a neefektivne ;), spravne reseni je:

Kód: [Vybrat]
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: NoWin 06 Listopadu 2009, 22:29:13
umh. konceptualne spatne a neefektivne ;), spravne reseni je:

Kód: [Vybrat]
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
↑ Tohle číslo je co? :) Mně z toho leze 69xxx (69686, 69092,... pokaždý jiná hodnota)...
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 10:55:19
umh. konceptualne spatne a neefektivne ;), spravne reseni je:

Kód: [Vybrat]
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
↑ Tohle číslo je co? :) Mně z toho leze 69xxx (69686, 69092,... pokaždý jiná hodnota)...

si catni /proc/meminfo a uvidíš.. Ntzův příkaz manipuluje s řádkem Mapped, takže si to nahraď čím chceš
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 11:09:31
btw, Ntz, není jednodušší napsat:

Kód: [Vybrat]
debian@debian-desktop:~$ foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g"
135540

?
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: arrange 07 Listopadu 2009, 14:41:43
Jednodušší asi jo, ale dvě roury?  :D  :D
Kód: [Vybrat]
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done

real 0m11.167s
user 0m5.272s
sys 0m5.308s
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done

real 0m4.397s
user 0m2.056s
sys 0m1.792s
arrange@lean:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done

real 0m3.781s
user 0m1.564s
sys 0m2.024s
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 15:00:14
Jednodušší asi jo, ale dvě roury?  :D  :D
Kód: [Vybrat]
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done

real 0m11.167s
user 0m5.272s
sys 0m5.308s
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done

real 0m4.397s
user 0m2.056s
sys 0m1.792s
arrange@lean:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done

real 0m3.781s
user 0m1.564s
sys 0m2.024s

jasně.. jenže když to pouštíš jen tak, není to fuk?

Kód: [Vybrat]
debian@debian-desktop:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done

real 0m5.522s
user 0m1.969s
sys 0m5.341s
debian@debian-desktop:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done

real 0m3.584s
user 0m1.159s
sys 0m2.448s
debian@debian-desktop:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done

real 0m3.929s
user 0m1.357s
sys 0m2.503s
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: arrange 07 Listopadu 2009, 15:17:29
Je to úplně jedno  :D

Proto tam mám ty dva smajly  :D  :D
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 16:08:47
když ne dvě roury, tak použít prostě

Kód: [Vybrat]
foo=Mapped; cat /proc/meminfo | sed -n "/^$foo/s/[^0-9]*//pg"
:P
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: nettezzaumana 07 Listopadu 2009, 19:06:44
hehe .. quejky, je to jedno, ale moc rour a moc binarek == neefektivne spotrebovane resources ..

ad.sed) sed ma syntaxi `sed VYRAZ VSTUP`, takze `cat soubor | sed VYRAZ` je noseni drivi do lesa
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 19:49:03
hehe .. quejky, je to jedno, ale moc rour a moc binarek == neefektivne spotrebovane resources ..

ad.sed) sed ma syntaxi `sed VYRAZ VSTUP`, takze `cat soubor | sed VYRAZ` je noseni drivi do lesa

hm ok..
Kód: [Vybrat]
debian@debian-desktop:~$ foo=Mapped; sed -n "/^$foo/s/[^0-9]*//pg" /proc/meminfo
138568
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: arrange 07 Listopadu 2009, 21:01:46
 rejpal :(
Kód: [Vybrat]
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/ s/[^0-9]*//pg" /proc/meminfo
4102392
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
4
arrange@lean:~$ foo=DirectMap4k; grep $foo /proc/meminfo
DirectMap4k:      102392 kB
Název: Re: Něco pro SEDaře [vyřešeno]
Přispěvatel: qUAKER 07 Listopadu 2009, 21:05:52
rejpal :(
Kód: [Vybrat]
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/ s/[^0-9]*//pg" /proc/meminfo
4102392
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
4
arrange@lean:~$ foo=DirectMap4k; grep $foo /proc/meminfo
DirectMap4k:      102392 kB


vypadá to že prostě při každém z těchto příkazů je to s tou pamětí jinak no :)