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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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

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

 

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

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

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

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

Всего записей: 6290 | Зарегистр. 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> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 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).

Всего записей: 288 | Зарегистр. 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> [PGP] [BTC]

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



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

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

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


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

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



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

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

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



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

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

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

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

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

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

Всего записей: 6290 | Зарегистр. 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. С предыдущими скриптами не получилось решить задачу.
 

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



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


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

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

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

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



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

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

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


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

Всего записей: 6290 | Зарегистр. 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> [PGP] [BTC]

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



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

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

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

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

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



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


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

Всего записей: 9272 | Зарегистр. 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
 
где у меня ошибка ?

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



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

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

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

Всего записей: 288 | Зарегистр. 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> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 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.

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

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

Всего записей: 288 | Зарегистр. 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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

Компьютерный форум 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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru