LINUX.ORG.RU

Оптимизация скрипта

 ,


0

1

Добрый день! Есть скрипт следующего вида:

pcent=`df -h --output='pcent' /home | sed '1d;s/ //g'`; script.sh $pcent
В данном случае на вход скрипта script.sh подается результат обработки df|sed. Можно ли как то обойтись без явного объявления переменной (уровень знаний по bash, пока осталяет желать лучшего)? И можно ли как то оптимизировать sed. (нужно удалить первую строку с выводом шапки таблицы, и удалить лишние пробелы в начале следующей строки, до первого символа).

Перемещено mono из talks


Можно ли как то обойтись без явного объявления переменной

df -h --output='pcent' /home | sed '1d;s/ //g' | script.sh

А что оптимизировать в sed'е я не понял.

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

Скорее всего его скрипт из stdin читать не умеет, так что предлагаю

script.sh "$(df -h /home | sed '1d;s/ //g')"

Faiver, у меня твой sed пожрал вообще все пробелы, это нормально? Или лучше использовать

sed 's/^[ \t]*//'  
alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 2)
Ответ на: комментарий от alozovskoy

За первое спасибо. А насчет пробелов, мне нужно только значение, без пробелов, шапки и прочего.

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

По сути,вместо скрипта используется dbus-send, в примере написан script.sh для упрощения.

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

Поэтому сначала и удаляется первая строка в выводе sed '1d;s/ //g'

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

тред не читал

script.sh $(df -h --output='pcent' /home | sed '1d;s/ //g')

xsektorx ★★★
()
Последнее исправление: xsektorx (всего исправлений: 1)

Вон из Talks'ов!

Технические разделы есть.

Camel ★★★★★
()

Явное объявление - это создание с помощью команды-конструктора, в bash почти не используется.

Вот так самую малость оптимальнее и более читаемо:

script.sh `df -h --output='pcent' /home | sed '1d;s/^ *//'`

В командах sed я обозначил: удалить любое количество пробелов в начале строки, «g» убрал, потому что заменить нужно один раз.

Обычно sed оптимизируют так: перед командой редактирования задают номер строки или шаблон поиска. Насколько я понимаю, удалив первую строку, sed больше не полезет ее редактировать, поэтому здесь ничего такого не нужно. Если я не прав, пусть кто-нибудь поправит.

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

а как заменить группы пробелов на одиночный пробел, начиная с 4-той группы?
т.е. есть вывод команды, в котором между слов по нескольку пробелов (табов нет). надо заменить такие группы пробелов на 1 пробел, но только начиная с 4-той группы пробелов (т.е. первые 3 группы пробелов не трогать). количество групп пробелов в строках разное.

teod0r ★★★★★
()
Последнее исправление: teod0r (всего исправлений: 1)

Оптимизация скрипта

обойтись без явного объявления

можно ли как то оптимизировать sed

#include<sstream>
#include<sys/statvfs.h>
#include<unistd.h>

int main(){
  auto cmd="/path/to/script.sh",path="/home";

  struct statvfs stt;
  statvfs(path,&stt);

  std::stringstream str;
  str<<100-stt.f_bfree*100/stt.f_blocks<<"%\n";

  execl(cmd,cmd,str.str().c_str(),0);}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.