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

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

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

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

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

 

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Найден виновник, когда копировал с помощью WinSCP файл, то в нем появились ^M символы.  
ASE_DAG - насчет gawk это для меня пока темный лес.
Alukardd - если в конце строки сделать одну ячейку и добавлять найденные значения, не заменяя ID номер - быстрее работать не будет?

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 20:19 04-09-2011 | Исправлено: digital422, 21:43 04-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Цитата:
быстрее работать не будет?
нет, все равно надо искать строку и вставлять текст - сама по себе замена нагрузки не несёт...
Воспользуйтесь лучше AWK скриптом - он должен чуть ли не на порядок ускорить дело.
 
ASE_DAG
Цитата:
/^.*\t.*\t.*\t.*\t.*\t[0-9]+$/  
мусье знает толк в извращениях...
Цитата:
in files ? files[$6]
Этот финт мне не совсем понятен. Что тут происходит? Что за if? Я понял $6 in files это читается)))
И кстати всё это свалится в stdout разумеется?
 
Добавлено:
У меня что-то совсем мозги атрофировались - я не смог ваш сценарий выполнить))) Поисковый шаблон не находит таких строк...

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:24 04-09-2011 | Исправлено: Alukardd, 22:39 04-09-2011
digital422

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

Цитата:
Воспользуйтесь лучше AWK скриптом

Не могу понять как он работает. Можно вдогонку попросить объяснить, как сделать добавление еще одной ячейки, чтобы сохранить ID колонку, чтобы было вот так:
 
09:30    1    Ролик1    без. даты 2011    10    123456789      123456789_deti.mp3

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 22:38 04-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Я щас его перепилю... У меня он в таком виде не пашет и вполне понятно по чему... (Что бы геморроя этого не было - разделитель должен быть точка с запятой, так что если можно изменить то лучше наверное изменить...)
 
Добавлено:
ASE_DAG
field separator там не табуляция потому что, а пробелы... В общем я уже все сказал по этому поводу. Нужен нормальный разделитель.
 
Добавлено:
Я чутка допилил ваш скрипт
Код:
#!/usr/bin/gawk -f
BEGIN {
    FILELIST="/home/alukardd/script/src"
    RS=",\n";
    FS="_";
    while (getline < FILELIST) {
        files[$1]=$0;
    }
    RS="\n";
    FS="[[:space:]]";
    OFS="\t";
}
/[[:digit:]]{6,9}/{  
    print ($0, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");
}
Вызывать так: gawk --re-interval -f script.awk file.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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:41 04-09-2011 | Исправлено: Alukardd, 23:10 04-09-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wget "http://torrent.abook-club.ru/browse.php?page=1" -O -| awk -v ORS=" " "{print( $0 );}">>1.txt
Почему с этой страницы awk не выводит всё в одну строку а с других выводит? Как вывести в одну строку?

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 23:16 04-09-2011 | Исправлено: king_stiven, 23:16 04-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
В таком виде как вы дали у меня вообще почти ни чего не пишет. Так думаю то, что надо:
wget "http://torrent.abook-club.ru/browse.php?page=1" -O - | awk -v ORS=" " '{print;}' >> 1.txt

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:33 04-09-2011 | Исправлено: Alukardd, 23:34 04-09-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, винда у меня.

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 23:47 04-09-2011
Alukardd



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

Цитата:
Да, винда у меня.
тяжёлый случай) Так заработало? Мб лучше cygwin поставить?

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:49 04-09-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, то же самое. Мне кажется дело в символе перевода каретки.

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 23:58 04-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
Цитата:
Мне кажется дело в символе перевода каретки.
хз, возможно это пере направление в файл попробуйте без него для проверки...

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 00:24 05-09-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем выход с wget В ФАЙЛ даёт в конце строк CR LF а при выводе AWK в файл оставляет CR , который текстовые редакторы воспринимают как конец строкм

----------
Игры зло.

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 00:51 05-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> print ($0, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");  
> $NF
Что это? $6!
 
> /^.*\t.*\t.*\t.*\t.*\t[0-9]+$/  
> мусье знает толк в извращениях...
Не-не-не. Это вы, мсьё, знаете толк, с вашим «sed -i '/ИТОГО/d;» и пр. фильтрами на невалидные строки, когда, совершенно очевидно, корректно выбирать только валидные.
 
> И кстати всё это свалится в stdout разумеется?
А не перезапишет исходник. :-) Разумеется.
 
> field separator там не табуляция потому что, а пробелы...
digital422 (14:55 04-09-2011)
Цитата:
Разделитель - можно все что угодно, в данном примере табуляция

 
> разделитель должен быть точка с запятой
Табуляция ничем не хуже.
 
> я не смог ваш сценарий выполнить))) Поисковый шаблон не находит таких строк...
Потому что мы, по-видимому, привели контрольный пример к разному виду. Тов. Digital'у могу повторить в третий раз, что надо приводить оригинальные файлы и таким образом, чтобы символы (зд. табуляция) не терялись.

Цитата:
Файлы живьем куда-нибудь (на Дропбокс, например) киньте.

 
> gawk --re-interval -f script.awk file.csv
В хэшбанге действительно нельзя указывать несколько ключей (#!/usr/bin/gawk --re-interval -f), поэтому, чтобы сохранить исполняемость скрипта ($ script.awk file.csv), я выше, как видно, вообще отказался от проверки на количество цифр в шестом поле, полагаю, что так лучше.
 
digital422
> как сделать добавление еще одной ячейки, чтобы сохранить ID колонку, чтобы было вот так:
 09:30    1    Ролик1    без. даты 2011    10    123456789      123456789_deti.mp3
 
Очевидно, что так:
 
print ($1, $2, $3, $4, $5, $6, $6 in files ? files[$6] : "E: FILE " $6 " NOT FOUND");
 
, что в свою очередь (как и написал выше т. Алукард) становится эквивалентным
 
print ($0, $6 in files ? files[$6] : "E: FILE " $6 " NOT FOUND");
 
king_stiven
> Мб лучше cygwin поставить?
+1. Это на самом деле удобнее.
 
> выход с wget В ФАЙЛ даёт в конце строк CR LF а при выводе AWK в файл оставляет CR , который текстовые редакторы воспринимают как конец строкм
Правильно. Дефолный RS в Гавке — \n (LF, как вы его назвали). Установите его в виндовый \r\n (awk -v RS="\r\n" blah-blah-blah).

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 01:45 05-09-2011 | Исправлено: ASE_DAG, 01:58 05-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот пример с нормальным разделителем.
09:30;" ";"Ролик4";"промо";10;123456789
надо получить:
09:30;" ";"Ролик4";"промо";10;123456789;123456789_s_14_sent.mp3
 
Alukardd
Запускаю так: gawk --re-interval -f script.awk file.csv выдает список из file.csv и в конце дописывает "E: FILE  NOT FOUND". Пробовал на файлах с табуляцией и с разделителем ;.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 07:18 05-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Табуляция ничем не хуже.  
это если там табуляция... Которая часто оказывается пробелами - как у меня вышло, например. И тогда сидим и нервно курим в сторонке от непоняток что не так...
Зачем вы так привязываетесь к своей $6??? Почему не использовать более универсальное $NF?
 
digital422
Ну так мой пример ориентирован как и т. ASE_DAG на табуляцию (пробелы, в моём случае)
Если всё-таки использовать ; , то в мой пример достаточно изменить FS="[[:space:]]"; на FS=";"; и OFS="\t"; на OFS=";";

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 10:22 05-09-2011 | Исправлено: Alukardd, 10:23 05-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На консоль выводит в таком виде, разделители как в посте выше, через ;

NOT FOUND23456Ролик4";"промо";10;123456
NOT FOUND23456789Ролик5";"промо2";10;123456789

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 11:53 05-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
ну хз что там такое... Домой приду вечером - проверю.
Скиньте тогда как вас уже давно просит ASE_DAG файлы примеры, можно не полные, но именно файлы, а не копипаст. Файлопомоек куча в сети.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:22 05-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://hddfiles.ru/download/8979/
там 2 файла исходников (xls и csv) 2 файла (xls и csv) что должно быть в финале (csv), xls для наглядности и небольшой файл с именами файлов.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:31 05-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AWK выел мне весь мозг, я не понимаю что у него творит print...
print $0, $6; выводит полную хрень, он $6 впихивает в начало, ставит сначала ; до всей строки, затирает начало от $0. Короче полный 3,14здец. Тоже самое если писать вместо $0 полностью $1,$2,$3,$4,$5,$6.
Если добавить к этому полному выводу в начало еще $6, то ровным счетом ни чего не добавится к выводу!!!
 
Дальше хрень с массивом files. print files[123456] вполне себе дает результат но если пытаться получить его через переменную то ни хрена не выйдет!!!
Я просто сижу и туплю в экран.
 
Еще я не понял что произошло когда я перед поисковым шаблоном убрал строку RS="\n" (вроде и так по умолчанию оно) - он вывалил мне все строки!!! И те что должны были отфильтроваться. Что вообще происходит???
 

 
Добавлено:
Это жесть!!!
Все работает!
Изменил формат файла с dos на unix. Все прекрасно пашет...

Код:
#!/usr/bin/gawk -f
BEGIN {
    FILELIST="/home/alukardd/script/8975/base.txt"
    RS=",\n";
    FS="_";
    while (getline < FILELIST) {
        files[$1]=$0;
    }
    RS="\n";
    FS=";";
    OFS=";";
}
/[[:digit:]]{6,9}/{
      print ($0, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");
}
Если конец строки виндовый всё-таки ставить щас попробую с RS поиграться...
 
Добавлено:
Если оставить format=dos, то тогда в RS надо изменить \n на \r\n
 
p.s. почему только \r\n, а не \n\r я не понимаю, всю жизнь считал что сначала newline, а потом уже carriage return.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 20:22 05-09-2011 | Исправлено: Alukardd, 20:37 05-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уф, после некоторого мучения у меня тоже заработало, вот с такими строками:
RS=",\n";
RS="\r\n";
Alukardd Большое спасибо за работу от меня и от "радийщиков", теперь время на сборку плей-листа у них будет уходить намного меньше.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 21:27 05-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И снова очередная задача.
Есть у меня удаленный роутер на котором периодически исправляю таблицы iptables и бывает что при возникновении ошибки в скрипте iptables теряю к нему доступ, т.к. по умолчанию правила в таблицах стоит DROP. На локальной консоли что-то пишется об ошибке, но понятно что я ее не вижу. Хочу сделать резервную копию скрипта iptables и засунуть его на проверку в cron, чтобы если правила первого скрипта загрузились с ошибкой он через некоторое время запустился и можно было получить удаленный доступ.
 
Первое что приходит в голову, сделать ping до любой локальной станции.

Код:
 
if ping -q -c 2 $HOST; then
echo "HOST OK"
else
script-iptables.sh
fi
 

но если станция отключена или по каким-то причинам недоступна скрипт выполнится. Есть еще более разумные предложения ?

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 20:34 07-09-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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Компьютерный форум 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