LINUX.ORG.RU
решено ФорумAdmin

Grep. Вытащить кусок строки с данными.

 , ,


0

1
cat /proc/meminfo | grep  'MemTotal:'
MemTotal:        2027564 kB

Нужно выковырять значение текущего объема памяти, чтобы в зависимости от этого выполнялось условие. Проблема в том, что курение манов и примеров не дало мне идеи как вытащить только значение 2027564. Идея была сделать grep от grep'а, но как? Как отбросить все кроме числа? Спасибо заранее. Прошу прощения за банальный вопрос, правда не нашел ответ. UPD: Нашел ответ в использовании awk

meklon@meklon-portable:~$ cat /proc/meminfo | grep  'MemTotal:' | awk '{print($2)}'
2027564



Последнее исправление: meklon (всего исправлений: 1)
Ответ на: комментарий от berrywizard

суровые люди на ЛОРе обитают:) благодарю, будет что изучить. синтаксис не самы простой для меня. я тут скриптик пишу для установки нужного софта на новую систему и его настройке. лень побудила. теперь модифицирую по мере сил. хочу запилить проверку количества памяти, если ее больше определенного значения - устанвить демон preload для ускорения запуска частых библиотек. сейчас как раз в зал управления томографом себе новую машину заказал - там и проверю.

meklon
() автор топика
Ответ на: комментарий от Lavos

awk, да. только у меня через одно место. awk от grep от cat. надо уточнить не было ли предков из Индии. но работает, правда...

meklon
() автор топика

вот тебе мой вариант:

sed -rn 's/MemTotal: +//;T;s/ .*//p' /proc/meminfo

drBatty ★★
()
Ответ на: комментарий от drBatty

хреновая привычка...

Да как посмотреть. Мне как-то какой-то преобразователь кодировки само файло исправил. (Вроде, не iconv. Что-то древнее, типа fromwin/towin.)

Вот и поимел привычку пользоваться пайпами, чтоб маны всякий раз не читать.

sergv
()
Ответ на: комментарий от MikeDM

это вы батенька зря на маны забиваете.

Не о том речь. Типа, про изменения в версиях не читать. В стиле: «раньше кидало в stdout, теперь делает правильно - правит источник...»

sergv
()
Ответ на: комментарий от sergv

Не о том речь. Типа, про изменения в версиях не читать. В стиле: «раньше кидало в stdout, теперь делает правильно - правит источник...»

через пайпы - дольше и кривее. Про лишнюю сущность слышал? Т.е. пайпы конечно нужны, но не во всех случаях. В этом случае они лишние. А то, что Over9000 лет назад какое-то УГ не умело читать файл - проблема этого УГ мамонта.

drBatty ★★
()
Ответ на: комментарий от Lavos

Помогите, пожалуйста.

#!/bin/bash
RAM_limit=2000000
RAM_capacity= awk '/MemTotal:/{print $2}' /proc/meminfo

if (( "$RAM_capacity" > "$RAM_limit" ))
  then
    echo "У вас достаточно оперативной памяти для установки демона preload"
    echo "Будет установлен демон preload"
  else
    echo "У вас мало оперативной памяти для установки демона preload"
    echo "Если вы все же хотите установить его - используйте sudo apt-get install preload"
  fi
Конструкция дает такой вывод
./if.sh
2027564
./if.sh: строка 5: ((: > 2000000 : ошибка синтаксиса: ожидается операнд (error token is "> 2000000 ")
У вас мало оперативной памяти для установки демона preload
Если вы все же хотите установить его - используйте sudo apt-get install preload

Насколько я понимаю, RAM_capacity не получает значение и равно null. При этом вместо операции присваивания RAM_capacity= awk '/MemTotal:/{print $2}' /proc/meminfo делает вывод типа echo (2027564 в выводе).

Второй день роюсь в синтаксисе, запутался совсем. Хорошо бы, чтобы и с sh и c ./ работал скрипт.

meklon
() автор топика
Ответ на: комментарий от marvin_yorke

Огромное спасибо, правда под sh не хочет работать, но это непринципиально. Будет что поковырять.

meklon
() автор топика
Ответ на: комментарий от marvin_yorke

Собственно в целом закончил скрипт. Не посмотрите? Может где-то накосячил? Работает, но улучшения всегда возможны. Я его запускаю на свежей машине. В комплекте к скрипту идут директории с конфигами, откуда скрипт их вытаскивает. Я решил, что это проще, чем запихивать в сам скрипт. Распаковал архив с деревом каталогов и запустил скрипт.

#!/bin/sh

#sudo add-apt-repository ppa:shnatsel/gimp-paint-studio

#Добавление листов репозиториев:
#sudo wget deb.playonlinux.com/playonlinux_maverick.list -O /etc/apt/sources.list.d/playonlinux.list
#Добавление репозитория в нужный нам лист:
#sudo sh -c 'echo "deb liveusb.info/multisystem/depot all main" >> /etc/apt/sources.list'
#Добавление GPG ключей аутенфикации:
#sudo wget -q "http://liveusb.info/multisystem/depot/multisystem.asc" -O- | sudo apt-key add -

#Обновим списки:
sudo apt-get -y --force-yes update
#Даем ответы на EULA (чтобы не прерывалась установка при возникновении необходимости ответить на лицензионное соглашение. Как работает хз - копипаста с google.code)
sudo apt-get install -y debconf-utils

# create answer file
sudo debconf-set-selections <<\EOF
sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true
msttcorefonts msttcorefonts/defoma note
ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true
ttf-mscorefonts-installer msttcorefonts/present-mscorefonts-eula note
EOF

#Тот самый пакет с EULA
sudo apt-get install -y kubuntu-restricted-extras

#Обновляем систему, включая обновления ядра
sudo apt-get -y --force-yes dist-upgrade

#Теперь займёмся установкой пакетов. Конечно можно устанавливать каждый пакет по отдельности, но в целях экономии мы сразу загоним их в переменную:
PACKAGES_INSTALL="krusader vlc clementine firefox qutim wine kde-wallpapers kdewallpapers plasma-widget-cwp"

sudo apt-get -y --force-yes install $PACKAGES_INSTALL

#Демон preload для машин с большой оперативной памятью. Типа prefetch в винде. Загружает часто используемые библиотеки в оперативную память заранее.
#Так как занимает память под быстрый запуск библиотек, проверяем количество RAM на компе
NOW=$(date +"%d-%m-%Y") #дергаем системную дату
RAM_limit=2000000 #Задаем лимит оперативной памяти необходимой для установки
RAM_capacity=$(awk '/MemTotal:/{print $2}' /proc/meminfo) #вытаскиваем количество RAM

echo $NOW >log.txt
if [ "$RAM_capacity" -ge "$RAM_limit" ]
  then
    echo "У вас достаточно оперативной памяти для установки демона preload"
    echo "Будет установлен демон preload"
    echo "Был установлен демон preload для увеличения скорости загрузки часто используемых библиотек" >>log.txt
    sudo apt-get -y --force-yes install preload
  else
    echo "У вас мало оперативной памяти для установки демона preload"
    echo "Если вы все же хотите установить его - используйте sudo apt-get install preload"
    echo "У вас мало оперативной памяти для установки демона preload" >>log.txt
  fi

echo "Были установлены следующие дополнительные пакеты:" >> log.txt
echo "$PACKAGES_INSTALL" "kubuntu-restricted-extras" >> log.txt

#Пакеты для удаления
PACKAGES_PURGE="kopete dragonplayer amarok"
sudo apt-get -y --force-yes purge $PACKAGES_PURGE

echo "Были удалены следующие пакеты:" >> log.txt
echo "$PACKAGES_PURGE" >> log.txt

#Чистим осиротевшие пакеты
sudo apt-get -y --force-yes autoremove

#.deb пакеты устанавливаем из соответсвующей папки:
#можно sudo dpkg -i ./.deb/*.deb по маске, но вручную нагляднее
#sudo dpkg -i ./.deb/teamviewer_linux.deb
#sudo dpkg -i ./.deb/skype-ubuntu_2.2.0.35-1_i386.deb

#Копируем конфиги программ и присваиваем владельца и группу
#Памятка: сделать автоматическое копирование конфигов прог в цикле, чтобы не городить огород для каждой в отдельности.
#Делаем backup папок конфигов, удаляем старые, если есть, заменяем настроенным.$SUDO_USER:$SUDO_GID - возвращают имя и группу пользователя, который запустил скрипт под sudo.
mkdir ~/Backup

cp -ax ~/.mozilla ~/Backup/
sudo rm -R -f ~/.mozilla
sudo cp -ax ./.config/.mozilla ~/.mozilla
sudo chown $SUDO_USER:$SUDO_GID -R ~/.mozilla

#конфиги Krusader копируем
cp -ax ~/.krusader ~/Backup/
sudo cp -ax ./.config/.krusader/krusaderrc ~/.kde/share/config
sudo chown $SUDO_USER:$SUDO_GID ~/.kde/share/config/krusaderrc

#Отдаем папку Backup пользователю
sudo chown $SUDO_USER:$SUDO_GID -R ~/Backup
#Сообщение о готовности
#clear
echo "Резервные копии конфигов помещены в ~/Backup" >> log.txt
echo "Все операции успешно завершены"
echo "Подробная информация в логе log.txt"

meklon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.