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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Ну так потому что ключ -а говорит grep'у искать выражение в бинарниках, так как-буд-то это обычный текстовый файл.

----------
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 | Отправлено: 16:23 14-06-2018
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
А в чем разница для грепа, если он ищет по телу файла? Мне непонятно, в одном и том же файле, например, без 100 совпадений, а с 120 совпадений. Такого же не должно быть!?

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 16:27 14-06-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Без -a он просто скажет что Binary file /bin/ls matches, а с -a он покажет подошедшие "строки" (строка здесь скорее всего нечто подошедшее под выражение между двумя 0x0A байтами)

----------
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 | Отправлено: 16:51 14-06-2018 | Исправлено: Alukardd, 16:55 14-06-2018
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет, подскажите нубу, пожалуйста.
 
0. Я столкнулся с неприятным глюком в работе gAwk.exe:
Цитата:
gawk: Q:\#-Comm\siRepls1.awk:29: (FILENAME=- FNR=315) fatal error: internal error (SIGSEGV)
 
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Наблюдается эпизодически (весьма редко). Появляется «как тать из кустов». Некоторое время «маячит» (на одном и том же «ровном» месте), затем исчезает (в этом месте).
Проблема в том, что  gAwk.exe используется при сборе/обработке данных, а заметить глюк удаётся лишь случайно. Соответственно, результаты работ (с привлечением gAwk) вызывают сомнение, как минимум...
 
1. Глянул в сети, сходу попалось только довольно невнятное:
Цитата:
It just sounds like a bug, probably introduced during the port to Win32.  It'd be difficult to diagnose without knowledge of debugging.  You may find that just getting another copy of gawk would resolve it, or as you found, another version completely has worked around the problem.

2. Диспозиция:
- ОС: WinXP+SP3 (Microsoft Windows XP [Версия 5.1.2600]);
- gAwk: GNU Awk 3.1.6. (Gawk for Windows);
- Задача:  собрать данные по гостевым раздела автора «Самиздата»;
- Алгортм:
  • запросить статистику раздела;
  • получить из статистики список текстов автора и по каждому тексту:
  • - выяснить наличие гостевой и, если она есть,
  • + получить данные самой первой и самой последней реплик.
3.Рабочий макет включает:
siStat.cmd
siStat.awk
siRepls1.awk
 
4. Выдача на экран штатно (фрагмент, для samlib.ru/s/sedrik/)
Цитата:
Q:\#-Comm>siStat.cmd s-sedrik.lst
? req s/sedrik/stat.shtml
:::
? req repls info for rycarxbezstraha
? req repls info for spisokfanfikowsmoimikommentarijami
:::

Тоже самое с глюком (фрагмент, первое вхождение siRepls1.awk в цикле опроса гостевой)
Цитата:
Q:\#-Comm> siStat.cmd s-sedrik.lst
? req s/sedrik/stat.shtml
:::
? req repls info for rycarxbezstraha
gawk: Q:\#-Comm\siRepls1.awk:29: (FILENAME=- FNR=315) fatal error: internal error (SIGSEGV)
 
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

? req repls info for spisokfanfikowsmoimikommentarijami
:::

5. Вопрос: можно ли как-то защититься, или хотя бы надёжно обнаруживать факт?
 
Спасибо.
 
---
Удачи!
Влад.

Всего записей: 262 | Зарегистр. 14-02-2009 | Отправлено: 05:35 26-07-2018
quaritexa



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наверное не туда спрашиваю, но может кто подскажет. Как запускать GNU утилиты из комплекта WSL под CMD (из батника например) windows 10?

Всего записей: 84 | Зарегистр. 26-09-2006 | Отправлено: 15:53 31-08-2018
ruslan910



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.
Кто поможет поправить команду? именно на awk.
есть файл со столбцами:

Код:
 
22222222222222222  100 100 20200816  27857 20200815  55  57
33333333333333333  121 310 20200803  12900 20200731  41    
44444444444444444  360 455 20200816   9627 20200718  41    
55555555555555555   51 456 20200705  54188 20200606  55    
33333333333333333
99999999999999999
22222222222222222
 

Требуется в неотсортированном списке удалить все строки $0 имеющие совпадения по 1 колонке $1, т.е. должно получится

Код:
 
44444444444444444  360 455 20200816   9627 20200718  41    
55555555555555555   51 456 20200705  54188 20200606  55    
99999999999999999
 

есть примеры, но удаляются только дубликаты, т.е. одна строка остается.

Код:
 
awk '{if(arr[$1] == 0) {print; arr[$1] = 1}}' file
awk '!a[$1]++' file
 

Пробовал man читать, голова закружилась  ops:

Всего записей: 428 | Зарегистр. 31-05-2008 | Отправлено: 16:39 01-09-2018
U235

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

Код:
 
{
a[$1]++
m[$1]=$0
 }
END {
for(i in a)
{
if (a[i]==1)
{print(m[i] )}
}
}
 
 

 

Код:
awk -f test.awk file

Это если файл не сильно большой.
Можно без AWK:

Код:
cut -f1 -d' '  file |sort|uniq -u >un.txt
sort file >file_sorted
join -j1 1 -j2 1  un.txt  file_sorted

если сортировка не критична.
Еще проще:

Код:
sort file |uniq -u -w 17

проверка на уникальность первых 17 символов.

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 08:44 02-09-2018 | Исправлено: U235, 14:07 02-09-2018
ruslan910



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
U235 Благодарю за помощь.

Всего записей: 428 | Зарегистр. 31-05-2008 | Отправлено: 13:17 02-09-2018
Valery_Sh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для тех кто делает ставку на (G)AWK, но пока блуждает в потёмках.
https://yadi.sk/i/m7iYcQTj3am7zg

Код:
GAWK: Effective AWK Programming
A User’s Guide for GNU Awk
Edition 4
December, 2012
может и есть лучше, но мне не попадалось.

Всего записей: 2171 | Зарегистр. 30-06-2008 | Отправлено: 14:47 02-09-2018
ruslan910



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я так понимаю, сильные издания всегда на буржуйском.

Всего записей: 428 | Зарегистр. 31-05-2008 | Отправлено: 20:22 03-09-2018
Valery_Sh



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

Цитата:
Я так понимаю, сильные издания всегда на буржуйском.

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

Всего записей: 2171 | Зарегистр. 30-06-2008 | Отправлено: 19:19 10-09-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может у кого есть готовое решение.
Надо файлы, лежащие в папке переименовывать, формируя в начале ID код и при каждом запуске скрипта ID должно увеличиваться, исключая повторения.
Например есть файлы: file01.mp3, file02.mp3 из них надо сделать 0001_file01.mp3, 0002_file02.mp3.
Затем запускается скрипт и новые файлы принимают вид: 0003_file05.mp3, 0004_file05.mp3.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 19:03 27-09-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
digital422
Как в имени файла однозначно определять идентификатор?

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 20:34 27-09-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Никак. В начало файла вставляем увеличивающийся на +1 номер и сохраняем файл с нумерацией, чтобы в следующий запуск увеличить на +1 и на то кол-во файлов что в папке. После окончания работы скрипта я сделаю перенос обработанных файлов в другую папку.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 07:45 28-09-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
digital422
Если скрипт не будет уметь обнаруживать идентификатор при его наличии в имени файла, то как вы себе представляете работу скрипта?

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 14:03 28-09-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Цитата:
Как в имени файла однозначно определять идентификатор?
Ну что Вы тут устраиваете, принимаете за истину, что начинается с \d+__ и всё. Чего тут разводить демогогию, если такой разделитель не зайдёт, вопрошающий сам его изменит.
 
digital422
Немного ада
Код:
d="/tmp/testd"; lastf=$(find "$d" -xdev -type f -regex '.*/[0-9]+__.*' -printf '%f\n' | sort -n -k1 -t_ | tail -1); [[ -e "$d/$lastf" ]] && lastn=${lastf%%__*} || lastn=0; while read -r f p; do [[ -z "$f" ]] && continue; ((lastn++)); mv "$p/$f" "$p/$(printf '%04d' $lastn)__$f"; done <<<"$(find "$d" -xdev -type f ! -regex '.*/[0-9]+__.*' -printf '%f %h\n')"


----------
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 | Отправлено: 19:03 28-09-2018 | Исправлено: Alukardd, 19:04 28-09-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Зачем так сложно
Вот это работает.
 

Код:
 
#!/bin/bash
 
#x=100000 #-первый запуск
x=$(cat /tmp/number.txt)
 
for i in $(ls /folder)
do
    mv ${x:1}_$i.jpg
    (( x++ ))
done
 
echo ${x} > /tmp/number.txt
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 19:41 28-09-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd
Ну вот. А вы сомневались в необходимости демагогии.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 20:26 28-09-2018
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
сейчас мучаю expect для автоматизации работы с терминалами на многих однотипных девайсах
в примерах в интернете у команды есть параметры -er -ex (например вот https://unix.stackexchange.com/questions/325096/expect-command-with-multiple-commands)
но что они означают, не пойму, в man тоже не все понятно, да и конкретно этих параметров там нет
 
подскажите кто знает
 
Добавлено:

Код:
#!/usr/bin/expect
 
if {[llength $argv] != 3} {
   puts "Вызов: script.sh <IP_ХОСТА> <ЛОГИН> <ПАРОЛЬ>"
   exit 1
}
 
set timeout 20
set name [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
 
spawn telnet $name
expect {
  "Login*"    {
    stty -echo
    send "$user\r"
    stty echo
  }
}
expect {
  "Password*" {
    stty -echo
    send "$password\r"
    stty echo
  }
}
expect {
  "(config)>" {
    stty -echo
    send "show associations\r"
    stty -echo
  }
}
expect {
  "(config)>" {
    stty -echo
    send "exit\r"
    stty -echo
  }
}
 

После отправки команды show associations в терминал
вылазит длинная портянка, как мне оттуда грепнуть только строки с содержанием mac ?
 
Добавлено:
И почему то stty -echo не отрабатывает, все равно вижу все в консоли

Всего записей: 2509 | Зарегистр. 18-02-2003 | Отправлено: 04:09 01-10-2018 | Исправлено: VecH, 04:10 01-10-2018
MAGNet



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

Код:
awk -F "@" '{ if (($3+0 > 0) && ($4 == "Москва")) {printf "%s,%d\n",$2,$3} }'

Руками запускаю - работает.
Запускается через incron - не работает.
Работать перестало после того, как гении в области обмена информацией добавиль фильтр с кирилическим полем Москва
 
Вот так работало всегда.

Код:
awk -F "@" '{ if ($3+0 > 0) {printf "%s,%d\n",$2,$3} }'

 
Не могу ума дать в чем разница запуска вручную или через incron? Есть у кого идеи?

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 10:57 03-10-2018
Открыть новую тему     Написать ответ в эту тему

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