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

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

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

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

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

 

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все в порядке, СПАСИБО еше раз !!!

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 14:46 24-10-2011
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Допустим у нас есть файл со следующим содержимым:

Код:
 
IP address of server1.office.local: 192.168.0.1
IP address of server2.office.local: 192.168.0.2
IP address of server3.office.local: 192.168.0.3
..........
IP address of serverN.office.local: 192.168.0.N
 

 
Возможно ли только средствами awk привести его к виду:

Код:
 
server1 192.168.0.1
server2 192.168.0.2
server3 192.168.0.3
..........
serverN 192.168.0.N
 


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

Всего записей: 6689 | Зарегистр. 29-04-2009 | Отправлено: 15:37 26-10-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
ВотЪ
awk '{gsub("\\..*","",$4); print $4" "$5}' /path/to/your/file

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 16:10 26-10-2011
urodliv



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

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

Всего записей: 6689 | Зарегистр. 29-04-2009 | Отправлено: 17:49 26-10-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Она видимо для shell'а... Экранирует экран - её bash(sh,zsh) съедает.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 18:17 26-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
>>> awk '{gsub("\\..*","",$4); print $4" "$5}' /path/to/your/file
>> как понимать первую косую черту?
> Она видимо для shell'а... Экранирует экран - её bash(sh,zsh) съедает.
Нет. В строгих (одиночных) кавычках бэкслэш для шелла особого значения не имеет.
$ echo \\ '\'
\ \

 
А его удвоение — это авковская специфика.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 04:06 27-10-2011
Alukardd



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

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 11:41 27-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> Кстати, одинарные кавычки проблемы не решали.
Простите, не понял, какой проблемы?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 12:42 27-10-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 15:54 27-10-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в этом скрипте последние 2-е ячейки заключить в кавычки? Исходник-csv с 6 ячейками, ячейки в кавычках, разделенные точкой с запятой. Скрипт дописывает 7 ячейку, но убирает кавычки с 6 ячейки и не дописывает их в 7-ю.

Код:
 
#!/usr/bin/gawk -f  
 BEGIN {  
     FILELIST="/home/alukardd/script/9175/base.txt"  
     RS=",\n";  
     while (getline < FILELIST) {  
         var=$0;  
         gsub(/.*\\/,"");  
         gsub(/_.*/,"");
         files[$0]=var;  
     }  
     RS="\n";  
     FS=";";  
     OFS=";";  
 }  
 /[[:digit:]]{6,9}/{  
         gsub(/"/,"",$NF);  
         print ("",$2,$3,$4,$5,$6, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");  
       }  
 


Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 19:48 02-11-2011 | Исправлено: digital422, 19:49 02-11-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Видимо изменить $6, на "\""$6"\""

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 20:37 02-11-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6-й столбец стал в кавычках, а как быть с 7-м, если экранировать $NF, то он не подставляет значения из base.txt?

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 20:45 02-11-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
OMG
видимо, заменить files[$NF] на "\""files[$NF]"\""

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 22:26 02-11-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли в gawk скрипте сделать переменную для внешнего ввода, например:
gawk "внешний ввод" --re-interval -f скрипт.awk входной файл.

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 16:19 03-11-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Не совсем понял суть? Вы хотите весь вывод записать в переменную?
Если так то для bash(в других не гарантирую) это выглядит так:
Код:
x="`gawk --re-interval -f скрипт.awk входной файл`"
echo "$x"
В zsh надо прописывать echo -E "$x".

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 17:37 03-11-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодаря Вашим примерам у меня получилось сделать свой вариант awk скрипта, причем самое удивительно, что он работает ).  Мой скрипт обрабатывает csv и выдает результат в выходной файл, мне надо делать из 5-ти входных, 5 выходных файлов, причем в самом awk скрипте есть уникальная строчка, которая относится к конкретному выходному файлу, например 1-ый файл: "#канал1", 2 файл "#канал2" и т.д. Самое простое сделать 5 awk скриптов со своими значениями и 1 исполняемый bash файл, но хочется файлов поменьше, 1 awk и 1 bash. В bash в строке gawk --re-interval прописывается "#канал1" и это передается в awk, тем самым на выходной получаем конечный файл со строчкой "#канал1" и т.д. для остальных 4-х.

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 20:04 03-11-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Растёшь на глазах!!!
 
p.s. я лично всегда больше инфы выношу после прочтения примеров, а не сырых манов, в манах можно подсмотреть некоторые детали и т.п., но всю суть с нуля мне из них не осилить.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:45 03-11-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня проблемка и хз как её решить
gsub(/.*\(([ОП]К)/,"\1",$0);
print $0;
Вместо того, что бы вывести ОК или ПК выводит квадрат (типа неизвестный unicode символ)... И хз что с ним делать. Входной файл в utf-8.
 
Добавлено:
Усё, нашёл ответ - \\1-9 не работают в sub и gsub, надо так:
q=gensub(/.*\(([ОП]К)/,"\\1","g");
print q;

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 20:04 05-11-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача:
Каждый день создаются папки в формате 20111101 до 20111131 (или 20111130), в них с интервалом 10 мин. пишутся файлы (00_00_01, 00_10_01 и до 23_50_01). Надо проверять, все ли файлы на месте, если нет, выдавать отчет об отсутствующих файлах.
Вот знаю что решение простое, но я немного запутался с seq, не получается сделать символ _ между переменными.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Покажите как вы начали решать задачу. Может стоит вас чуть поправить, а может всё с нуля написать...

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 16:58 09-11-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

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