Portál AbcLinuxu, 12. května 2025 09:35
free -m | grep Mem | awk '{ print $3 }'
vyp????e celkovou kapacitu opera??n?? pam??ti a j?? pot??ebuju tenhle p????kaz vlo??it do nov??ho skriptu echem tak aby se v nov??m skriptu vykonal a tu hodnotu ulo??il do prom??nn??.
echo 'allram=$(free -m | grep Mem | awk ''{ print $2 }'')' >> novy_skript.sh
Řešení dotazu:
free -m | grep Mem | awk '{ print $3 }'Je l??pe si rovnou p??i u??en?? zvykat, d??lat v??ci jednodu??eji:
free -m | awk '/^Mem:/{ print $2 }'Krom toho (a tady je riziko strojov??ho zpracov??v??n?? v??stupu u??ivatelsk??ch n??stroj??, kter?? m????e nav??c pou????vat kdo v?? jak?? m??stn?? nastaven??) alespo?? na m?? distribuci je celkov?? kapacita pam??ti ve druh??m sloupci (v????e pozm??n??no). No a te?? k tomu, co V??m zde konkr??tn?? nefunguje. P??edpokl??d??m, ??e chcete aby na konci
novy_skript.sh
p??ibyl ????dek, nap??.:
allram=7992Pokud je tomu tak, tak sta???? zakopan?? pes je v tom, ??e jste to cel??, co vypisuje
echo
obalil '
a ne do "
. Prvn?? z nich je opravdu doslovn?? ??et??zec, u druh??ho je povoleno nahrazov??n?? prom??nn??ch a pr??v?? tak?? toho `p????kaz`
(resp. $(p????kaz)
).
echo 'allram=$(free -m | grep Mem | awk ''{ print $2 }'')'Je (pro názornost) to samé, jako:
S1='allram=$(free -m | grep Mem | awk ' S2='{ print $2 }' S3=')' echo "${S1}${S2}${S3}"Prostě tři spojené po sobě jdoucí řetězce (vždy od
'
do '
). Můžete třeba takto:
echo 'allram=$(free -m | awk "/^Mem:/{ print \$2 }")'Nebo prohozené páry
'
a "
, s escapováním obou $
, jak je níže.
Jinak, řetězit grep a awk je opravdu špatný zvyk. U nás byste na tom neuspěl na pohovoru. ;)
Jen mohu se zeptat co je spatne na retezeni GREP a AWK?Voláte tím ten
grep
na něco, co umí awk
sám. Je to neestetické, neefektivní (pro každé zpracování v rouře další fork) a potenciálně nepřehledné (když se to řetězení začne prodlužovat a střídající se tam různé grep
/sed
/awk
kombinace, aby se v tom prase vyznalo... a to má dopad na čitelnost a udržovatelnost kódu).
Teoreticky drobnost, ale stejně není od věci se sed
a awk
pořádně naučit a podle toho je pak používat více, než jen jako fajnový nástroj na vypsání požadovaného sloupce. ;)
Dobry den.
Nevim, zda jsem Vas dobre pochopil:
echo "allram=$(free -m | awk '/Mem/ {print "\x27" $2 "\x27" }')" allram='496'
Marek
cmd="allram=\$(free -m | grep Mem | awk '{ print \$2 }')" echo $cmd >> novy_skript.shnebo
cat >> novy_skript2.sh <<EOF allram=\$(free -m | grep Mem | awk '{ print \$2 }') EOF
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.