ocehb: (Default)
2013-12-12 10:50 pm
Entry tags:

Задача на собеседовании админу

Придумал subj: как стандартными средствами в gnu уних/линух окружении
запустить на параллельное выполнение задачи, чтобы la не превышал какое-либо
значение. Например: есть каталог с тучей больших файлов, всех их надо
зипнуть или гзипнуть, задания можно запускать параллельно,
общий la не должен превышать 2.5.

пс. наверно пятничная задачка :)
ocehb: (Default)
2011-06-23 03:55 pm
Entry tags:

"Поиск и замена текста на новый во многих файлах в unix"

отсюда


Команда найдёт все файлы в текущем каталоге и подкаталогах, содержащие OLD_TEXT и заменит строку "OLD_TEXT" на "NEW_TEXT":
grep -HR OLDTEXT ./ | awk '{print $1}' | sed 's/:.*$//' | grep -v '~' | sort | uniq | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"


мне кажется, что ужасно. мое решение:

grep -rl OLDTEXT . | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"


если хочется убрать ненужные файлы, то вставить grep -Ev '(~|.o|.a)$', по вкусу.

ps. а sed 's/:.*$//' эффективно прибъёт файлы с двоеточием в имени.

pps. gnu grep умеет -Z
ocehb: (Default)
2010-12-12 05:03 pm
Entry tags:

нестандартное использование флага -s в install

Если после инсталляции через команду install надо произвести какие-либо действия,
то можно их активировать через флаг(и) -s (—strip и —strip-program).

Например надо перекодировать файл из koi8-r в utf8:


# cat > encode.sh
#! /bin/sh -f
iconv -c -f koi8-r -t utf8 $1 /tmp/tmp.$$
mv -f /tmp/tmp.$$ $1
^D
# chmod +x encode.sh
# install —strip —strip-program=./encode.sh file /install/path/file
ocehb: (Default)
2010-10-08 08:25 pm
Entry tags:

(no subject)



Помогите собрать программку, которая бы находила фрагмент текста в первом файле (например после слов DESC) и искала бы наличие подобного фрагмента во втором файле,
если такой фрагмент в другом файле находится то записываем этот фрагмент в 3й файл)



# grep -F "$(grep -m1 -A1 DESC file.1 | tail -1)" file.2 > file.3





ocehb: (Default)
2010-02-25 09:22 am
Entry tags:

поиск самого последнего созданного файла


sh# stat —format "%Y/%n/%F" * | grep "/regular file\$" | \
  sort -rn | head -1 | cut -d/ -f2


остались разборки с последними одновременно созданными файлами.
ocehb: (Default)
2009-04-07 01:22 am
Entry tags:

рандомизация crontab'а

Чтобы не загружать cron'ом систему или удаленную систему, можно использовать рандомизированный sleep.

примеры: )
ocehb: (Default)
2008-10-09 01:01 pm
Entry tags:

шеллописарям на заметку

grep имеет флаг --line-buffered

как применять )
ocehb: (Default)
2008-04-15 12:59 am
Entry tags:

повторение пройденного

тут я привел 2 решения о параллельном запуске нескольких процессов. нашел еще одно:


# print -l *.txt | xargs —max-procs=4 —max-args=1 proc
ocehb: (Default)
2007-03-07 08:26 pm
Entry tags:

день года в дату (gnu)

на входе -- день года, на выходе -- секунд с начала эпохи


function day2date () {
  local a=$(date -d "1 jan" +"%s")
  while [[ $(date -d "1970-01-01 UTC $a seconds" +"%j") -ne $1 ]]; do
    a=$[$a+24*60*60]
  done
  print $a
}

# date -d "1970-01-01 UTC $(day2date 77) seconds" +"%d-%m-%Y"
18-03-2007
#


zsh'изм, но идея понятна.
ocehb: (Default)
2006-07-13 02:42 pm
Entry tags:

Гхм... :)

Дан скрипт:

#!/bin/sh -e
action1
action2
action3

action${i} — некоторые существующие в системе программы, прописанные в $PATH. Известно, что action1 и action2 никак не зависят друг от друга и могут выполняться параллельно, однако action3 требуется, чтобы и action1, и action2 успешно завершили свою работу.
Что необходимо изменить в скрипте, чтобы распараллелить работу action1 и action2, но запускать action3 только после успешного завершения action1 и action2?

Решение )
ocehb: (Default)
2006-07-13 01:31 pm
Entry tags:

И еще.

Имеется файл, каждая строка которого представляет собой запись из двух полей. Поля разделены табуляцией. Первое поле — время в time_t, второе поле — URL. Задача: для каждого встречающегося в файле URL выделить запись, которой соответствует самое раннее время.

Решение )
ocehb: (Default)
2006-07-13 12:12 pm
Entry tags:

И еще задачка из яндекса

Как сравнить (просто узнать совпадают или не совпадают, список различий получать не требуется) два очень больших (таких, что команда diff говорит "memory exhausted" :) текстовых файла?

Решения: )
ocehb: (Default)
2006-06-06 10:13 am
Entry tags:

shell функция

В конкретном каталоге перевести все файлы и каталоги (и подкаталоги и т.д.) в нижний регистр.

Как это будет на zsh )
ocehb: (Default)
2006-03-02 08:12 am
Entry tags:

Не ожидал

# GET "http://www.livejournal.com/misc/fdata.bml?user=ocehb" | \
  grep -E "(<|>)" | wc -l
232
#