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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
urodliv



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

Цитата:
А почему в качестве разделителя записей у вас кавычка?


Код:
gawk -F, 'NR!=1 {print($1","$2","$3","$4"_files.jpg")}' 1.csv

результат:

Код:
"23.12.2010","hdd","asasasa","0001"_files.jpg
"23.12.2010","hdd","dsdsdsd","0002"_files.jpg
"23.12.2010","hdd","asasasa","0003"_files.jpg
"23.12.2010","hdd","dsdsdsd","0004"_files.jpg
"23.12.2010","hdd","asasasa","0005"_files.jpg
"23.12.2010","hdd","dsdsdsd","0006"_files.jpg
"23.12.2010","hdd","asasasa","0007"_files.jpg

Последняя кавычка всё портит. Я в этом деле не силён, поэтому извращаюсь.
 
Добавлено:
Мда почитал исходную задачу. Моя "шляпа" является лишь частью решения.

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 5668 | Зарегистр. 29-04-2009 | Отправлено: 22:23 24-12-2010
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, все-таки то, что я написал в прошлый раз, лучше не использовать.
Накатал куда менее быдлокодерский пример, вот:
 
awk -F ',' -v ORS='' -v OFS=',' 'NR==1{print $0"\n"}; NR!=1{print $1,$2,$3; getline < "422.ls"; print ",\""$0"\"\n"}' 422.csv
 
;)

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 22:52 24-12-2010 | Исправлено: ASE_DAG, 22:58 24-12-2010
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кавычка была по умолчанию при экспорте из OO, можно и табуляцию использовать.
"23.12.2010"    "hdd"    "asasasa"    "0001"
"23.12.2010"    "hdd"    "dsdsdsd"    "0002"
"23.12.2010"    "hdd"    "asasasa"    "0003"
"23.12.2010"    "hdd"    "dsdsdsd"    "0004"
Не факт, что имя файла будет называться именно 0001_files.jpg, вместо files может быть любое имя, включая знаки нижнего подчеркивания. Но одно условия неизменно-это начальный ID, он всегда в имени файла будет соответствовать последней ячейке (xls.oo,csv).

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 07:46 25-12-2010 | Исправлено: digital422, 07:49 25-12-2010
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
> Кавычка была по умолчанию при экспорте из OO, можно и табуляцию использовать.  
Кавычка? Запятая, вы хотели сказать. Но это не важно.
 
 
Итак, все работает правильно? Комментарии нужны?

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 20:03 25-12-2010
urodliv



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

Цитата:
Итак, все работает правильно?

Почти. Тут есть одна загвоздка. digital422 хочет чтобы из файла 422.ls не просто строки подставлялись, а из всего файла выбиралась нужная строка. То есть как я понял в файле 422.csv строки не сортируются по последнему полю и их число не обязательно совпадает с количеством строк в файле 422.ls
 


----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 5668 | Зарегистр. 29-04-2009 | Отправлено: 21:11 25-12-2010
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Если файлы не отсортированы, то их просто надо отсортировать.
Если их число не совпадает, то я не понял, что за задача (реальная задача) стоит перед опом.

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 21:16 25-12-2010 | Исправлено: ASE_DAG, 21:16 25-12-2010
urodliv



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

Цитата:
Если файлы не отсортированы, то их просто надо отсортировать.

Оно понятно, но вдруг тут важен "момент вхождения"...

Цитата:
Если их число не совпадает, то я не понял, что за задача стоит перед опом.

Мая не автор ТЗ, мая только предполагать

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 5668 | Зарегистр. 29-04-2009 | Отправлено: 21:18 25-12-2010
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поставлю задачу еще раз.
1. есть файл с содержимым реальных файлов:
disk-files.txt:
22345_2010-12-11_145037.jpg
00001_2010-12-01_221650.jpg
63211_2010-12-20_164238.jpg
13455_2010-12-01_221718.jpg
15124_2010-12-06_221737.jpg
28764_2010-12-12_145043.jpg
14567_2010-12-03_221723.jpg
62345_2010-12-13_211723.jpg
и т.д. список большой.
 
2. есть csv файл:
25-12-2010.csv
"23.12.2010","hdd","asasasa","22345"
"23.12.2010","hdd","dsdsdsd","00001"
"23.12.2010","hdd","asasasa","63211"
"23.12.2010","hdd","dsdsdsd","13455"
"23.12.2010","hdd","asasasa","15124"
"23.12.2010","hdd","dsdsdsd","28764"
"23.12.2010","hdd","asasasa","14567"
 
надо в конечном итоге получить в формате csv:
"23.12.2010","hdd","asasasa","22345_2010-12-11_145037.jpg"
"23.12.2010","hdd","dsdsdsd","00001_2010-12-01_221650.jpg"
"23.12.2010","hdd","asasasa","63211_2010-12-20_164238.jpg"
"23.12.2010","hdd","dsdsdsd","13455_2010-12-01_221718.jpg"
"23.12.2010","hdd","asasasa","15124_2010-12-06_221737.jpg"
"23.12.2010","hdd","dsdsdsd","28764_2010-12-12_145043.jpg"
"23.12.2010","hdd","asasasa","14567_2010-12-03_221723.jpg"
 
Даные для подстановки берутся из файла disk-files.txt. С предыдущими скриптами не получилось решить задачу.
 

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 12:29 26-12-2010 | Исправлено: digital422, 12:31 26-12-2010
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422 Сделать это на bash скрипте - самоцель?
Просто на Перле такая задача решается много проще.


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 16313 | Зарегистр. 13-06-2007 | Отправлено: 12:59 26-12-2010
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я бы с большим удовольствием это все сделал через SQL, но не силен ни в perl, ни в SQL.

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 13:40 26-12-2010
urodliv



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

Цитата:
С предыдущими скриптами не получилось решить задачу.

Только что проверил скрипт ASE_DAG: таки пашет!


----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 5668 | Зарегистр. 29-04-2009 | Отправлено: 14:02 26-12-2010 | Исправлено: urodliv, 14:02 26-12-2010
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
УМВР. Либо вы неправильно ставите задачу, либо не так тестируете.
Вы точно уверены, что порядок строк совпадает, как в примерах?
 
urodliv
Неужели вы думаете, что я стал бы выкладывать скрипты, не отрабатывающие на контрольном примере.
 
vlary
awk — баш в примерно той же степени, что и perl. ;)

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 18:55 26-12-2010
urodliv



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

Цитата:
Неужели вы думаете, что я стал бы выкладывать скрипты, не отрабатывающие на контрольном примере.

А я уже давным-давно не думаю - это вредно. А вот сомневаться во всём продолжаю. Ибо "я сомневаюсь, значит я существую".

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 5668 | Зарегистр. 29-04-2009 | Отправлено: 19:02 26-12-2010
ASE_DAG



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


----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 20:06 26-12-2010 | Исправлено: ASE_DAG, 20:07 26-12-2010
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача - периодически проверять, открыт ли порт приложением (не упало ли оно).
 
#!/bin/sh
NETSTAT=`netstat -nat |grep 8081| awk '{ print $4 }'`
if [ "$NETSTAT" = "" ]
then
    действие на перезапуск
fi
 
где у меня ошибка ?

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 10:42 09-02-2011
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
нигде.
p.s. а зачем awk?

Всего записей: 1898 | Зарегистр. 27-07-2002 | Отправлено: 11:26 09-02-2011 | Исправлено: FuzzyLogic, 11:28 09-02-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
почему-то не реагирует на отсутствие прослушиваемого порта.
awk - где то взял этот пример, не помню.

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 14:28 09-02-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
А вы уверены, что в том интерпретаторе, на который у вас ссылается /bin/sh есть команда [? Она, афайк, не позиксная.
Сочетание грепа с авком действительно выглядит несколько странно.
 
if test -z `netstat -nat | awk '/8081/{print $4}'`; then echo "restart"; fi
Не?

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 16:56 09-02-2011 | Исправлено: ASE_DAG, 16:57 09-02-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно ли в переменную запихать несколько строк? Все мои попытки сводятся к тому, что bash просто уничтожает символы переноса строки.
 
Так вопрос перерос в чисто теоретический, т.к. свои проблемы я решил так:
Код:
1>>file cat - << EOT
строка1
строка2
 
строка4
EOT


----------
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.

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 17:07 10-02-2011 | Исправлено: Alukardd, 17:10 10-02-2011
digital422

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

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 19:27 10-02-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru