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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sphinx114
echo всегда работает корректно. Что вам нужно-то?
 
Использовать подстановку переменных и арифметику в башевской конструкции {x..y[..incr]}, я правильно понял?
 
$ x=5
$ eval echo {$x..$((x**2))..$x}
5 10 15 20 25

 
> echo 123 | echo
А это что такое?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:53 06-03-2013
Sphinx114



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

Цитата:
eval echo {$x..$((x**2))..$x}  

Ага, работает, то что надо.

Цитата:
> echo 123 | echo
А это что такое?

Первое эхо передаёт 123 второму, которое и должно вывести 123 в консоль.
 
О! вот так работает:
echo 123 1>&2 | echo -n
 
ах нет, это не то, оно не передаётся через |. Чето я запутался:
 
$ dig ru-board.com +short 1>&2 | echo 345
345
72.233.112.74
 
$ echo 123 1>&2 | echo 345
123
345

Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 21:02 06-03-2013 | Исправлено: Sphinx114, 21:21 06-03-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sphinx114
Цитата:
Первое эхо передаёт 123 второму, которое и должно вывести 123 в консоль
щито за бред? оО а что первое какое-то ущербное что оно Вас не устроило?
Нормально опишите ситуацию и мы Вам сможем подсказать, как лучше сделать.

----------
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:04 06-03-2013 | Исправлено: Alukardd, 01:02 07-03-2013
Sphinx114



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

Цитата:
что первое какое-то ущербное что оно Вас не устроило?

Дело не в нём, а в том что выхлоп первой команды даже частично не передается через | в echo. Ну видимо я чего-то не понимаю.
 
Я думал, что должно быть так:
$ echo 123 | echo
123
 
cat выводит результат первой команды как и ожидается:
$ echo 123 | cat
123

Цитата:
Нормально опишите ситуацию

Изучаю баш, появляются вопросы.

Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 00:28 07-03-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sphinx114
Дык echo не умеет stdin читать, оно просто забивает на всё, что ему свалилось из pipe'а.
Цитата:
Изучаю баш
это дело полезное.

----------
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 | Отправлено: 01:03 07-03-2013
digital422

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

Код:
 
#!/usr/bin/gawk -f
BEGIN {
}
 
if ($1 ~ /[[:digit:]]/) {
gsub (что сюда вписать ?)
"11:22 этот текст надо убрать"
}
print $1
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 21:59 07-03-2013
volodyalipkin



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

Код:
 
{
a="11:22 qwerty";
gsub(/^([[:digit:]]+:[[:digit:]]+)(.+)/,$1,a);
print a;
}
 

Всего записей: 771 | Зарегистр. 12-10-2002 | Отправлено: 22:56 07-03-2013
kpp77

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

Код:
echo "11:22 этот текст надо убрать" | awk '{a=$0; gsub(/^[0-2][0-9]:[0-5][0-9]/,"",a); gsub(a,"",$0); print $0}'

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 23:25 07-03-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422, volodyalipkin, kpp77
 
А вы не перемудрили ли?
 
$ gawk '/^[[:digit:]]/ { print $1 }' <<< '11:22 этот текст надо убрать'
11:22


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 09:26 08-03-2013 | Исправлено: ASE_DAG, 09:28 08-03-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Забыл написать что текст берется из csv файла, поэтому ни один из 3 примеров не срабатывает.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 10:01 08-03-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Ну так подправьте под ваши условия. Или, если чего-то не понимаете, обратитесь за помощью на форум (например, сюда), приведя как минимум вводные и задачу.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:11 08-03-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вроде же 6 постами написал задачу, есть csv файл в котором одна из строк содержит время и после времени информацию. Надо убрать эту информацию и оставить только время, используя gawk.

Код:
есть - "11:22 этот текст надо убрать"
должно быть - "11:22"

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 11:16 08-03-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Если формат текста именно такой "11:22 этот текст надо убрать", т.е. после времени всегда пробел(или иной постоянный разделитель), тогда
да
Код:
gawk '/^[[:digit:]]/ { print $1 }'
, а если после времени произвольный символ?
digital422
А что делать с остальными строками файла, кот. не содержат время?

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 14:02 08-03-2013 | Исправлено: kpp77, 14:12 08-03-2013
digital422

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

Код:
if ($1 ~ /[[:digit:]]/) {
    gsub(/[[:alpha:]]/,"",$1);
    gsub(/\"/,"",$1);
}

первый gsub убирает символы, второй удаляет кавычки.
 
Чувствую долго я буду мучится
Вот входной файл (csv):

Код:
 
"Монтажный лист";;;;;;"02/01/2000  Суббота"
;"источник";"Тайм-код";"ID";"Название";"Хрон.";"№"
"08:13   внутри";;;;;
"Подблок № 1 ";;;;;;"1Р"
"1";;;"A1234001";"Имя1";"10";
"2";;;"A1234002";"Имя2";"20";
"3";"35322/13    ";"00:00:00:00";"A1234003";"Имя3";"15";
;;;;;"Итого 1    01:00";
;;;;;"Итого 2     01:00";
"08:55   внутри";;;;;
"Подблок № 1 ";;;;;;"2Р"
"1";;;"A1234005";"Имя5";"10";
"2";;;"A1234006";"Имя6";"20";
"3";"35322/13    ";"00:00:00:00";"A1234006";"Имя7";"15";
"4";;;"A1234008";"Имя8";"15";
;;;;;"Итого 3     01:00";
;;;;;"Итого 4     01:00";
;;;"Итого за 02/01/2003";"Объем";"0.0166666666666667"
;;;;"Кол-во";"113"
 

Его надо привести к такому виду:

Код:
 
08:13
A1234001 Имя1
A1234002 Имя2
A1234003 Имя3
08:55
A1234005 Имя5
A1234006 Имя6
A1234007 Имя7
A1234008 Имя8
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:33 08-03-2013 | Исправлено: digital422, 14:48 08-03-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Т.е. если в строке есть хотя бы одна цифра, удалить все буквенные символы и кавычки?

Код:
if($1~/[[:digit:]]/){
     a=$1;
     gsub(/[[:alpha:]]/,"",a);
     gsub(/\"/,"",a);
  }
  else { print a,$0 }

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 14:49 08-03-2013
digital422

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

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:59 08-03-2013
kpp77

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

Код:
 awk -F";" '{gsub(/\"/,"",$0);
             if($1~/^[0-2][0-9]:[0-5][0-9]/){
                 a=$1;
                 gsub(/^[0-2][0-9]:[0-5][0-9]/,"",a); gsub(a,"",$1);
                 print $1;
             }
             else {
             if($1~/^[0-9]/) { print $4,$5 };
             }
             }' $1
 

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 15:14 08-03-2013 | Исправлено: kpp77, 15:15 08-03-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77 - я второй день пытаюсь написать, а тут за 15 мин, Спасибо

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 15:19 08-03-2013
kpp77

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

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 15:23 08-03-2013
digital422

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

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 15:26 08-03-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