Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sunsunsun
 
> Как это сделать sed/awk/... ?  
 
По-хорошему — никак. Только если «в лоб».
 
$ sed 's|.*<b>\(.\+\)</b> \(.\+\)</a>.*|\1 - \2|' <<< '<a class="song" href="/artist/aaa/song_bbb"><b>XXX YYY</b> ZZZ TTT</a>&nbsp;'
XXX YYY - ZZZ TTT

 
> в cygwin, если это важно.
Не важно, под Цигвином поставляются нормальные ГНУ-шные утилиты.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 13:46 16-07-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Можно и через сепараторы awk,но там тоже по сути "в лоб".

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 14:28 16-07-2013
sunsunsun

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG спасибо, решение работает отлично!
 
не думал, что у регулярных выражений такие проблемы с разбором html...

Всего записей: 105 | Зарегистр. 23-03-2006 | Отправлено: 14:29 16-07-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите раскидать из csv в xml.
Первый код это исходник, второй - то что должно получиться.
В xml должны меняться значения start и start_type, условия такие - если одна строка со временем, то ставятся 1, если на следующей строке такое же время то должны быть 0.
Третий столбец csv перемещается в строку duration, эта цифра должна умножаться на 25.
 
Исходник:

Код:
 
09:15;223456789_имя-15;15
09:45;123456789_имя-15;15
09:45;133456789_имя-10;10
10:55;133456789_имя-10;10
12:20;123450789_имя-20;20
14:25;123456789_имя-15;15
15:15;123456799_имя-5;5
16:10;123456789_имя-15;15
16:10;133456789_имя-10;10
 

 
Что должно получиться:

Код:
 
<?xml version="1.0" encoding="UTF-8"?>
    <item url="223456789_имя-15"
        duration="375"
        comment="09:15"
        start=1
        start_type=1 </item>
        <item url="123456789_имя-15"
        comment="09:45"
        start=1
        start_type=1 </item>
    <item url="133456789_имя-10"
        duration="250"
        comment="09:45"
        start=0
        start_type=0 </item>
    <item url="133456789_имя-10"
        duration="250"
        comment="10:55"
        start=1
        start_type=1 </item>
 

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 19:43 10-08-2013 | Исправлено: digital422, 19:46 10-08-2013
albel



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
digital422

Код:
 
#!/bin/awk -f
BEGIN     {   FS=";"
        printf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
        }
NR == 1 {   START=$1
        TYP=1
    }
{    printf("\n<item url=\"%s\"\n", $2)
    printf("\tduration=\"%d\"\n", $3*25)
    printf("\tcomment=\"%s\"\n", $1)
    if ( $1==START && NR>1 )  
    {    TYP=0
    }
    else  
    {    TYP=1
    }
    START=$1
    printf("\tstart=%d\n",TYP);  
    printf("\tstart_type=%d\n</item>",TYP);
}  
 
 


----------
Я никогда не спорю. Я никогда не противоречу. Я иногда забываю. / © Б.Дизраэли/

Всего записей: 11003 | Зарегистр. 30-08-2002 | Отправлено: 21:13 10-08-2013 | Исправлено: albel, 21:14 10-08-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Ужас, Вы не могли циферки в "url" для примера попроще написать или вообще обойтись совсем примером, а то, искать отличия в них очень неприятно.
 
И ещё, не очень понятно про start и start_type, кажется у Вас зависимость не совсем такая — получилось так: только при совпадении и url и duration ставятся нули.
 
Добавлено:
Надеюсь что т. albel осознал вопрос лучше меня

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 21:14 10-08-2013 | Исправлено: Alukardd, 21:16 10-08-2013
albel



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd
вроде всё в соответствии с ТЗ сделал :-D
Я не заморачивался смыслом параметров, только их положением

----------
Я никогда не спорю. Я никогда не противоречу. Я иногда забываю. / © Б.Дизраэли/

Всего записей: 11003 | Зарегистр. 30-08-2002 | Отправлено: 21:17 10-08-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
albel
А ТЗ — это Точка Зрения?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 21:30 10-08-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
albel - Спасибо, работает!

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 21:39 10-08-2013 | Исправлено: digital422, 19:48 12-08-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странная штука наблюдается. Есть в xlsx файле ячейка со временем, но после экспорта в csv через xlsx2csv.py вместо времени появляется такое: 80040.0. Как с этим можно бороться или преобразовать в нормальное временное значение?

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 19:48 12-08-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Утилита xlsx2csv.py имеет ключ -f (--dateformat=), увы он предназначен для управления выходным форматом для записи в csv. На вход ему подавай полный формат времени, так что треба открыть Excel или Calc и поменять формат ячейки на MM/DD/YYYY HH:MM:SS.
Или возможно подыскать замену данному скрипту.
 
p.s. за 15минут большая из скрипта и его апробации не вынес, так что мог что-то упустить из его возможностей.
 
Добавлено:
А вот ещё немного вник в код, формат ячейки HH:MM:SS он воспринимает как "time", а после его можно заставить парсить его как дату, см. код в строках 291-340 (функция handleCharData)
 
Что-то башка не варит, так что сделал костыль вот такой:
if (format_type == 'date') or (format_type == 'time'): # date/time
Что заменить в указанном выше диапазоне строк очевидно.
 
Вызывать потом скрипт придётся с параметрами, что бы везде год 1904 не появился
python xlsx2csv.py -f '%Y %H:%M' datetime.xlsx datetime.csv

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 21:37 12-08-2013 | Исправлено: Alukardd, 22:21 12-08-2013
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно ли сделать заливку файлов на Яндекс.Диск из шелла? Подсобите, если возможно... Принимаются любые методы - curl, python, perl - любые!

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 13:19 13-08-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
Учимся использовать поисковые системы.
 
Цитата из первой же ссылки:
Цитата:
Yandex.Disk can be accessed by WebDAV. Install vebdavfs2:
 
# apt-get install davfs2
 
Then edit /etc/davfs2/secrets. Just add line with address, login and password:
 
https://webdav.yandex.ru username@yandex.ru "userpass"
 
Now you cat mount yandex.disk as an ordinary drive to folder /mount/yandex:
 
mount -t davfs https://webdav.yandex.ru /media/yandex
 
Now it is possible to store backups in cloud.


----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:39 13-08-2013
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd, спасибо! про ВебДАВ я не подумал

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 14:00 13-08-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd - сегодня выяснилось что программа на выходе может выдавать txt файл с табуляцией, так что никакой xlsx уже не нужен. Спасибо за правку xlsx2csv.py, может когда нибудь сгодится. Вообще крайний вариант был загонять xlsx в LibreOffice и сохранять в csv, тогда ячейка даты сохраняется нормально.
 
Как из 2 строки с текстом "на дату 14.08.2013  " выделить саму дату и изменить точки на "-", на 2 вопрос я похоже знаю ответ- gsub(/./-/,);. Все в рамках скрипта с заголовком #!/usr/bin/gawk -f.

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 19:37 13-08-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
> Вообще крайний вариант был загонять xlsx в LibreOffice и сохранять в csv
 
Не вижу в этом ничего крайнего. Именно так и надо было делать с самого начала.
 
Для тех, кто будет это читать, напоминаю, как оно делается:
$ soffice -env:UserInstallation=file://$HOME/.libreoffice-headless --headless --convert-to csv test.xlsx
 
-env:UserInstallation — это воркэраунд вокруг бага № 37531.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:57 13-08-2013 | Исправлено: ASE_DAG, 21:58 13-08-2013
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день. Вопрос таков:
Есть файл лицензии drweb. В нём есть строчка Expires=2013-09-14 (14:57) UTC с датой истечения лицензии. Как извлеч эту дату и сравнить её с текущей датой? В случае истечения срока лицензии хотелось бы отправлять письмо на почту. Как можно всё это реализовать?
 

Всего записей: 510 | Зарегистр. 01-04-2009 | Отправлено: 15:09 19-08-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FoxBlack09
Код:
#!/bin/bash
if [ $(($(date --date="$(awk -F= '/Expires/{print $2}' /tmp/drweb)" '+%s') - $(date '+%s'))) -lt 0 ]; then
  env MAILRC=/dev/null from=user@mail.ru smtp=smtp.mail.ru smtp-auth-user=user@mail.ru smtp-auth-password=87JQS8wZ smtp-auth=login mailx -n -s "DrWeb License" user@mail.ru <<< "License expired!!!"
fi

Утилита mailx должна быть из пакета heirloom-mailx.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 15:49 19-08-2013 | Исправлено: Alukardd, 15:59 19-08-2013
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Спасибо, я пошёл пробовать.

Всего записей: 510 | Зарегистр. 01-04-2009 | Отправлено: 16:14 19-08-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, FoxBlack09
Или вариант с предупреждением о истечении срока:

Код:
 
#!/bin/sh
drwebkey="drweb32.key"
email="MYMAIL"
keydate=$(sed -r -n -e "/Expires/{s/Expires=(.*)$/\1/p;q}" "$drwebkey")
timeleft=$(($(date --date="$keydate" +"365*%y+%j") - ($(date +"365*%y+%j"))))
if [ $timeleft -le 30 ]; then  
echo "$timeleft days left to expire DrWeb license at $(uname -n)" | mail -s "License expires!" $email
fi
 

PS. Попрошу сапогами не бить за возможные ошибки ;-). Работу mail не проверял.  
Исправлено: не "%d", а "%j". Вроде проверял ?
del Где-то ошибка в арифметике. Прошу прощения. Ищу. Еще и скобки потерял в группировке... Прошу прощения...
Про $((($(date --date="$keydate" +"%s") - $(date +"%s"))/(24*3600))) не сообразил... Может будет и правильнее.

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 16:15 19-08-2013 | Исправлено: Alex_Piggy, 16:41 19-08-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru