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

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

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

Всего записей: 7741 | Зарегистр. 08-09-2001 | Отправлено: 20:31 24-12-2019
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
хотя нет, при ваших grep'ах и tr'ах, лучше оставить как Вы сделали сами: просто echo после всего.

----------
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 | Отправлено: 21:16 24-12-2019
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd,
echo 321 | grep -o . | sort -f | tr -d '\n' | tee /dev/stderr | pbcopy ; echo
так получается как и в варианте с pbpaste

Всего записей: 7741 | Зарегистр. 08-09-2001 | Отправлено: 22:06 24-12-2019
U235

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

Код:
grep -o . | sort -f | tr -d '\n'

можно заменить на

Код:
awk '{split($0, w, ""); for(i=1; i<=asort(w); i++) printf w[i] }'

Насколько это будет лучше или хуже..

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 22:20 24-12-2019
los

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

Цитата:
Насколько это будет лучше или хуже..

длиннее точно, да и в случае с BSD awk работать не будет.

Всего записей: 7741 | Зарегистр. 08-09-2001 | Отправлено: 22:44 24-12-2019
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех.
Помогите решить следующую задачку:
 
есть 2 здоровых файла - их я хочу использовать как аргументы.
 
Файл1
1
2
3
 
Файл2
а
б
в
 
Я вот такую конструкцию сляпал - не взлетает - оочень медленно
 

Код:
declare -a itemid=($(cat ITEMID.txt))
declare -a elementen=($(cat elementen.txt))
 
for i in ${elementen[@]}
    do  
        for b in ${itemid[@]}
            do
                db2 -x "select DOCID from ICMADMIN."$i" where ITEMID='"$b"'" && echo "$i"
        done
done

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 14:59 07-01-2020 | Исправлено: CrownRU, 15:21 07-01-2020
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
CrownRU
Цитата:
не взлетает - оочень медленно
А проблема точно в плоскости скрипта, а не SQL-запросов?

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 15:29 07-01-2020
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, это возможно. Вот думаю, как распараллелить это дело.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 16:00 07-01-2020
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, CrownRU
А где можно про синтаксис db2 почитать?  
В SQLite я бы импортировал ITEMID.txt в временную таблицу и  
select ITEMID, DOCID from ICMADMIN."$i" where ITEMID in (select ITEMID from TMPTABLE)
И, естественно, не выполняется по одной команда, а создается и подгружается SQL файл с командами.
Типа

Код:
 
echo CREATE TEMP TABLE tmptable(itemid); > script.sql;
echo .import ITEMID.txt tmptable >> script.sql;
for i in ${elementen[@]}; do
  echo SELECT "$i", docid, itemid FROM ICMADMIN."$i" WHERE itemid in (SELECT itemid FROM tmptable); >> script.sql;  
done
sqlite3 source.db ".read script.sql"
 

PS. Source.db - база данных, к которой нужно обращаться.
UPD. PPS. Сейчас нет доступа к bash. Не помню - как экранировать точку с запятой в echo. Выделил жирным.

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 16:19 07-01-2020 | Исправлено: Alex_Piggy, 16:21 07-01-2020
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо за совет. К сожалению в базу данных нельзя ничего писать.
Поставил скрипт - пускай пашет.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 17:16 07-01-2020
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
CrownRU
Не за что... Я думал, что для db2 тоже временная таблица (TEMPORARY TABLE) хранится исключительно в памяти во время текущей сессии...
Все равно чем каждый раз запускать db2 составьте SQL файл и скормите его db2 - это будет много быстрее...
 
Добавлено:
UPD - а вроде согласно Types of tables таки "created global temporary table" хранятся исключительно в памяти.

Цитата:
 Neither application process has access to or knowledge of the rows in the other application instance of TEMPTAB.

Также согласно  Creation of temporary tables
Цитата:
DB2 does not log operations that it performs on created temporary tables; therefore, SQL statements that use them can execute more efficiently. Each application process has its own instance of the created temporary table.

Вот заполнять возможно придется набором INSERT...

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 17:29 07-01-2020 | Исправлено: Alex_Piggy, 17:40 07-01-2020
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, сделал так.
Генерируются файл с select запросами и скармливается в db2 -f. Стало намного быстрее.
Вот код, если кому пригодится.
 

Код:
ARGLIST=$(sed -n ":L; N; \${s/\n/','/g; s/^\|$/'/g; p; q};  bL; " ITEMID.txt)
TABLES=( $(<et.txt) )
IFS=$'\n'
for ((i=0;i<${#TABLES[@]};i++))
do
        echo "echo Elementtyp: ${TABLES[$i]}"
        TABES=( ${TABLES[$i]/#/select DOCID from ICMADMIN.} )
        echo "$TABES where ITEMID in ($ARGLIST)"
done

 
Добавлено:
Следующая задачка...
Как поймать момент начала и конца записи файла?
 
Есть директории, куда пишутся временные файлы. Как они туда записываются, идет их обработка и они стираются.
Процесс очень быстрый, поэтому даже, чтобы их увидеть пришлось извернуться вот так:
 

Код:
 while true; do ls --full-time temp | fgrep -v "insgesamt 0"; done

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 10:13 10-01-2020
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
Собтия файловых операций можно поймать утилитами Inotify

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 11:06 10-01-2020
CrownRU



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

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 12:58 10-01-2020
kkuuhhaa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть строки с разделителями, некоторые поля пустые. Можно ли, используя awk, НЕ выводить строку с пустым полем?
a1,b1,c1,,,f1
a2,b2,c2,d2,e2,f2
 
awk -F "," "$4 /???/ {next} {print $1, $2, $4}"
Что написать вместо ???. дабы 1я строка была пропущена?
 
 
 

Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 18:21 14-01-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kkuuhhaa
Если проверять на пустоту именно четвёртое поле, то так:
awk -F, '{if ($4) print $1,$2,$4}'
 
p.s. В ваших двойных кавычках вообще незнама что произойдёт, потому что $4 и всё подобное раскроется как переменные шела.

----------
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 | Отправлено: 18:55 14-01-2020
kkuuhhaa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
ДА, спасибо, сам допёр, тока if ($4*1==0) ...
чёта запаниковал

Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 19:59 14-01-2020
Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
Я в bash-скриптах полный ноль, так что прошу помощи у знатоков.
 
Ситуация следующая. Жена долгое время сохраняла страницы из тырнета со всякой всячиной а-ля "Web Page, complete". Любовно раскладывала по папкам и распихивала по поддерикториям. В итоге у неё накопились горы папок вида
--- Вышивки\
--- ...
--- Супы\
--  гороховый_files\
--  гороховый.html
 
 
Возникла необходимость сконвертировать из этого безобразия файлы .maff, которые представляют собой обычный zip-архив со следующей структурой:
 
--- folder\
--  index_files\
--  index.rdf
--  index.html
 
 
Мне нужен скрипт, который бы совершал следующие действия внутри целевой директории:
0. Создавал папку, в которую будут складываться сгенерированные файлы .maff с названием, к примеру "!_! - maffs".  
Создавал бы в ней текстовый файл отчёта, например, "log.txt"
 
1. Для каждого .htm или .html файла находил папку с соответственным именем + "_files"
 
2. Если папка найдена:
2.0. Выясняет время создания исходного файла
2.1. Внутри исходного файла заменяет все ссылки, ведущие внутрь папки + "_files" - проставляет новое имя папки: "index_files"
 
2.2. Генерирует новое имя - для будущего файла .maff. Надо убрать все "нехорошие символы" из исходного имени - типа % < > : " ? * | \ / (https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words) Заодно обрезать имя, если оно длиннее, чем 150 символов
2.3. В папке "!_! - maffs" создаёт zip-архив с поученным в предыдущем пункте именем и расширением maff. Внутри создаёт папку "000", в которую складывает:  
- модифицированный ранее файл, переименованный в "index.html",
- соответствующую папку с новым именем "index_files",
- файл index.rdf, имеющий следующий вид:
<?xml version="1.0"?>
<RDF:RDF xmlns:MAF="http://maf.mozdev.org/metadata/rdf#"
         xmlns:NC="http://home.netscape.com/NC-rdf#"
         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <RDF:Description RDF:about="urn:root">
    <MAF:indexfilename RDF:resource="index.html"/>
  </RDF:Description>
</RDF:RDF>
 
Залил index.rdf сюда:
https://anonymousfiles.io/g4fsbDEO/
 
2.4. Изменяет атрибут получившегося файла .maff, заменяя время его создания - на время создания исходного файла
 
3. В файл отчёта (созданный нами log.txt) добавляет строки вида:
________________________________
Номер файла в очереди обработки:
номер файла
 
Исходное имя:  
исходное имя
 
Имя итогового файла .maff:  
имя файла .maff
 
Статус конвертирования:
ОК
________________________________
 
 
 
Как можно догадаться, если в пункте 2. соответствующую файлу папку обнаружить не удалось, надо это зафиксировать в log.txt.
Равно как оставить сообщение со статусом "Failure", в случае проблем с получением целевого файла .maff
 
 
У жены установлен linux mint, если что.
 
 
Вот для примера несколько файлов и папок, которые надо преобразовать:
https://anonymousfiles.io/6KNTyRGx/
 
 
Вот пример того, что должно получиться (один .maff файл, полученный из файла "9.html" и папки "9_files", которые находятся в архиве с примерами):
https://anonymousfiles.io/APiuIFzB/
 
 
ЗЫ
Пробовал гуглить, но обнаружил только это:
https://github.com/troyp/.scripts/blob/master/maff
 
И этот скрипт не делает практически ничего из того, что мне нужно...
 
Думал привести тот код, который мне удалось набросать из говна и палок, но вовремя вспомнил, что переделывать такое - тот ещё геморрой. Подозреваю, там ошибок столько, что проще написать новый.
 
Понимаю, что это куча работы, но вдруг найдётся добрый человек, у которого достаточно знаний и желания помочь...

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 18:12 23-01-2020 | Исправлено: Sanatory, 19:55 23-01-2020
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как для tr использовать в качестве разделителя "\|"?
чтобы на выходе получить a\|b\|c\|d

Всего записей: 7741 | Зарегистр. 08-09-2001 | Отправлено: 20:25 24-01-2020
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
los
Цитата:
Как для tr использовать в качестве разделителя "\|"?
У tr разделителем может быть только один символ.

Цитата:
чтобы на выходе получить a\|b\|c\|d
 
а что было на входе?
 

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 00:10 25-01-2020
Открыть новую тему     Написать ответ в эту тему

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