Показаны сообщения с ярлыком скрипты. Показать все сообщения
Показаны сообщения с ярлыком скрипты. Показать все сообщения

воскресенье, 8 мая 2011 г.

Мешок банальных советов

Если вы пользуетесь юникс-системой, работаете в консоли или просто иногда пишете шелл-скрипты, для вас под катом может найтись полезная информация, изложенная в виде кратких советов разной степени полезности и банальности.


понедельник, 29 ноября 2010 г.

Nautilus scripts: действия с выделенными файлами

У жены на ноуте стоит Убунта. Как-то раз спрашивает она меня: как уменьшить картинки, чтоб отправить по почте?
Показал ей как это делается в gThumb. Чуть позже слышу — вздыхает. Смотрю — у неё открыта папка с кучей картинок, а она сидит и ресайзит их, одну за другой: открывает, Image -> Resize, width = 1024, Scale, File -> Save As…

СТОП!

Мой первый рефлекс, естественно, Ctlr-Alt-T, cd куда надо, for f in *.jpg; do convert $f -resize 1024… Жена, однако, с шеллом не знакома и желанием осваивать не горит.

Было бы круто прикрутить пункт в контекстное меню, чтоб он выделенные файлы ресайзил. Но как?

понедельник, 4 октября 2010 г.

cut и grep или awk?

Часто в скриптах можно встретить что-то вроде foobar|awk '{print $1}' («часто» — это действительно часто).

Такой вызов awk всего лишь вывходит первую (n-ную) колонку из вывода предыдущей команды. Но это явный оверкилл! awk — довольно мощный язык потоковой обработки данных, и применение его как простого field-separator не есть хорошо.

Для вырезания из строки указанного поля лучше использовать команду cut. Она умеет меньше, а потому проще в использовании и быстрее.

В современном линуксе обработка вызова awk куда более сложна, чем вызов cut. В дебиане, например, awk — линк на /etc/alternatives/awk, который ведёт (чаще всего) на gawk. Который почти в 10 раз больше по размеру, чем cut. Разумееся, cut загружаеся быстрее.

cut умеет вырезать не только байты, но и нужные поля (опция -f). Поле — это текст между разделителями. По-умолчанию разделитель пробел/табуляция, но он легко меняется опцией -d.

Второй подход — использовать опцию -o у grep. Эта опция выводит не всю строку, а только совпадающее с критерием поиска grep. Очевидно бесполезно при поиске точной подстроки, но очень полезно при использовании регулярных выражений.

Например,
grep -v "#" /etc/inittab |cut -f 4 -d : -s
выведет список программ, запускающихся init'ом (четвёртое поле, поля разделяются двоеточием).

Или
grep http://\\S\\+ -o /var/log/apache2/error.log
выдаст список URL'ов из файла с ошибками (первый урл в строке).

… и никакого awk.

UPD: В комментариях подсказывают ещё более интересную конструкцию без запуска внешнего файла (команда read реализуеся средствами bash'а):
foobar | (read p1 p2; echo p1)

P.S. Речь не о единичном вызове (тут нет разницы awk, grep или даже python/perl). Речь о множестве вызовов в цикле в скрипте. Все примеры сравнивайте в цикле с сотнями (лучше тысячами) вызовов.


Источник: Хабрахабр - Linux для всех
Оригинальная страница: cut и grep или awk?