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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Лишний ключ g для сортировки.
Скрипт обновлен в предыдущем посте.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 23:38 21-01-2013 | Исправлено: kpp77, 00:30 22-01-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго всем времени суток, есть задача сравнить два файла по первому столбцу и удалить строки с повторяющимся столбцом, использую скрипт
Код:
awk -F"/" '{printf "%s\n", $1}' minus.txt | egrep -v -f - input.txt > output.txt

 
minus.txt
seconddomain.com
firstdomain.com
 
input.txt
seconddomain.com/cvewvwe/vewsvwe
seconddomain.com/vewv/vewfvew
seconddomain.com/ed32rf2/f42f432
thirddomain.com/f32f/f32f32
thirddomain.com/f23
firstdomain.com/f32f32543/f42
firstdomain.com/f32f32
 
output.txt
thirddomain.com/f32f/f32f32
thirddomain.com/f23
 
 
Может кто подскажет как сделать, чтоб построчно сравнивать? Т.е. чтоб просто брать из minus.txt по строке и проводить ее через grep, затем с полученным файлом вновь провести ту же операцию но уже со второй строкой файла minus.txt? Варианты с массивами не подходят, не хватает памяти, понимаю что тупо строки по 1 тоже не эффективно но решения  в голову не приходит.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 23:11 22-01-2013 | Исправлено: Krist, 23:20 22-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
Так в чем вопрос-то?
 
Добавлено:
Так, хорошо, вопрос вы добавили. Но понятней, чего вы желаете, мне пока не стало. Вы хотите сказать, что на то решение, что вы здесь привели не хватает памяти? Т. е. у файла minus.txt сверхбольшой об’ем?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:16 22-01-2013 | Исправлено: ASE_DAG, 23:30 22-01-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, получается забивается память и виснет компьютер,  как я понимаю результатом из
Код:
awk -F"/" '{printf "%s\n", $1}' minus.txt
не сверхбольшой, но где-то 1 млн строк по 20 символов с среднем.  
Еще раз повторюсь что я понимаю, что "грепать 1 млн раз" это идиотизм, есть еще решения чисто через awk используя NR == FNR, там тоже массивы и те же проблемы.
 
Может естть какие-то версии comm или diff которые работают не только со строками, но и колонками?

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 23:40 22-01-2013 | Исправлено: Krist, 23:43 22-01-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
А чем не устраивает существующее решение?
Если построчно, то в цикле, но непонятно для чего.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 23:43 22-01-2013 | Исправлено: kpp77, 23:44 22-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> где-то 1 млн строк по 20 символов с среднем
Т. е. всего лишь 20 Мб или того меньше? Чем же тут можно «забить память»?
 
Дайте реальные файлы minus.txt и input.txt, я попробую поизучать, что там происходит.
 
Добавлено:
kpp77
> А чем не устраивает существующее решение?

Цитата:
...получается забивается память и виснет компьютер,  как я понимаю результатом из...


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:48 22-01-2013 | Исправлено: ASE_DAG, 23:53 22-01-2013
Krist



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

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 00:03 23-01-2013 | Исправлено: Krist, 00:06 23-01-2013
kpp77

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

Код:
sort minus.txt > minus_sort.txt
sed '/\//!s~.*~&\/~; s~\(^[^\/]*\)\/.*~\1 &~' input.txt | sort +0 -1 > input_sort_txt
join -a1 -o 2.1 1.2 input_sort_txt minus_sort.txt | sed -n '/^ /s~^ \(.*\)~\1~p' > output.txt
 

Самому интересно как поведет себя join в этом случае

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 00:06 23-01-2013 | Исправлено: kpp77, 00:27 23-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
Ну вот подумайте, зачем мне «кусочек», когда у нас проблема проявляется только на больших об’емах. А? :-) Давайте целиком, благо мест куда можно залить пару сотен мегабайт в Сети масса.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:15 23-01-2013
kpp77

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

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 00:19 23-01-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG поймите меня правильно, но там не только моя работа (, не могу.
join я тоже пробовал сперва, почему-то после сортировки все равно
Цитата:
join: file 1 is not in sorted order
, и конкретно Ваш скрипт ничего не сделал ( я до этого сам отсортировал, но для надежности не убирал из Вашего набора команд) ... вообще какие-то чудеса, только добавил пустых строк в начале %2 по общему количеству строк.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 00:22 23-01-2013 | Исправлено: Krist, 00:25 23-01-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
Если пишет join: file 1 is not in sorted order - значит неправильно отсортировано для join.
На Вашем примере-кусочке все отлично работает.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 00:25 23-01-2013 | Исправлено: kpp77, 00:35 23-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> но там не только моя работа (, не могу
Ну значит сгенерируйте другую пару файлов тех же свойств и об’ема, на которой проблема проявляется. Что еще я вам могу предложить?
 
Добавлено:
Krist
Хотя, вот что я вам могу предложить:
 
$ awk -F '/' '{print $1}' minus.txt | grep -F -v -f - input.txt > output.txt
 
— попробуйте, я думаю, время выполнения существенно сократится.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:36 23-01-2013
Krist



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

Цитата:
I got the same error with Ubuntu 11.04, with sort and join both in version (GNU coreutils) 8.5.
 
They are clearly incompatible. In fact the sort command seems bugged: there is no difference with or without the -f (--ignore-case) option. When sorting, aaB is always before aBa. Non alphanumeric characters seems also always ignored (abc is before ab-x)
 
Join seems to expect the opposite... But I have a solution
 
In fact, this is linked to the collation sequence : unsing LANG=en_EN sort -k 1,1 <myfile> ... then LANG=en_EN join ... worked.
 


Код:
sort minus.txt > minus_sort.txt && sed 's~\(^[^\/]*\)\/.*~\1 &~' input.txt | sort -k 1,1 > input_sort_txt && join -a1 -o 2.1 1.2 input_sort_txt minus_sort.txt | sed -n '/^ /s~^ \(.*\)~\1~p' > output.txt

Только у меня один вопрос, что значило sort +0 -1.
 И маленькая проблемка (думаю сам разберусь, правда мне нравится больше AWK, но с SED разберусь) почему-то оставляет пустую строку в месте где первая строка (у которых только 1 столбец без разделителя) некоторых групп

Цитата:
realnation.co.kr
realnation.co.kr/tt/board/ttboard.cgi?act=popup&db=rose_festival&idx=11395
realnation.co.kr/tt/board/ttboard.cgi?act=popup&db=rose_festival&idx=11633
realnation.co.kr/tt/board/ttboard.cgi?act=popup&db=rose_festival&idx=9515  

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 02:15 23-01-2013 | Исправлено: Krist, 02:21 23-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> весьма благодарен, все заработало
Вы про grep -F? Что ж, всегда пожалуйста. Комментарии по этой части нужны?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:18 23-01-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
хех да это понятно (если Вы про пробелы), да мне еще и строка нужна была на месте которой пробелы, сделал так:
 

Код:
 
grep -v "^\s*$"
 
vernu_stroku.awk:
BEGIN {vari="none";FS="/"; c=0; }
{
            if ($1~vari)  
            {
            arr[c]=$0
            c=c+1
            vari=$1
            }
            else  
            {
            print vari
            for (i = 0; c > 0; i++)  { print arr[i]; c--;}
            delete arr
            c=1
            vari=$1
            arr[0]=$0
            }    
        }

 
Всем спасибо за помощь, силу Ру-Борда вечна.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 04:27 23-01-2013 | Исправлено: Krist, 04:31 23-01-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
Скопируйте еще раз скрипт со join (я внес изменения по этому поводу).
Попробуйте, если есть время.
И еще просьба, оцените время выполнения (time перед именем скрипта) всех вариантов скриптов.
Интересно на ваших объемах.
sort +0 -1 - это эквивалент sort -k1,1

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 12:30 23-01-2013 | Исправлено: kpp77, 12:31 23-01-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
> да это понятно (если Вы про пробелы)
Нет, о пробелах я ничего не говорил. Я говорил о режиме --fixed-strings вместо --extended-regexp.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:03 23-01-2013
Krist



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

Цитата:
Скопируйте еще раз скрипт со join (я внес изменения по этому поводу).  
пока не получится, занята машина, но обязательно попробую, спасибо!
ASE_DAG

Цитата:
Я говорил о режиме --fixed-strings вместо --extended-regexp.
да честно особо не вдаваюсь обычно, сперва всегда пробую --fixed-strings, если ругается, то правлю на --extended-regexp ... скорость сильно падает, но терпимо.
 
Вообще честно только месяц назад первый раз попробовал что-то обрабатывать на *nix системах (до этого только Win) и понял, что я просто терял время с этими мелкомягкими (. Там вставляеш в какой-нить Textpipe и неделю ждеш, а тут 3 часа подумал, потыкался и через 3 часа результат ... впечатляет.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 23:09 24-01-2013
askad

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нужно телнетится к Cisco и проверять ошибки в ip nat translation и если они есть, то чистить их.
Если ошибки есть, то после ввода команды: show ip nat tran | i err
выдается строка: icmperr ---------- ip address
 
Подскажите, как правильно составить условие для проверки вывода.  
 

Код:
#!/usr/bin/expect
 
log_user 1
set timeout 100
spawn telnet 192.168.2.1
expect "Username: "
send "aleks\r"
expect "Password: "
send "qwerty\r"
expect "*#"
 
send "sh ip nat tran | i err\r"
 
if...expect "*icmperr*"
then  send "clear ip nat tran *"
else...send "exit\r"

 
expect eof

Всего записей: 50 | Зарегистр. 11-04-2003 | Отправлено: 13:53 08-02-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 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