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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть
Код:
echo -e "free\tused\tcache\n$(free -h | awk '/^Mem/ {printf($4)}')\t$(free -h | awk '/^Mem/ {printf($3)}')\t$(free -h | awk '/^Mem/ {printf($6)}')"

Как бы, только раз вызывать: free -h?
Размер табуляции \t регулируется?
 
Добавлено:
на соображал:

Код:
echo -e "free\tused\tcache\n$(free -h | grep "Mem:" | awk '{printf($4"\t"$3"\t"$6)}')"

 
з.ы.

Код:
echo -e "free\tused\tcache\n$(free -h | awk '/^Mem/ {printf($4"\t"$3"\t"$6)}')"


Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 23:45 06-06-2020 | Исправлено: iNNOKENTIY21, 13:26 08-06-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как бы это за один запрос?:
Код:
echo -e "sda\n$(nc localhost 7634 | sed 's/|//m' | sed 's/||/ \n/g' | grep 'sda' | awk -F '|' '{print $3}')°C"
echo -e "sdb\n$(nc localhost 7634 | sed 's/|//m' | sed 's/||/ \n/g' | grep 'sdb' | awk -F '|' '{print $3}')°C"


Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 13:28 08-06-2020
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
можете выложить вывод без sed, grep, awk? И вывод полученный с ними?

Цитата:
А как бы это за один запрос?:  

пока не подсказали решение можно просто в скрипт поместить.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 14:32 08-06-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
Цитата:
можете выложить вывод без sed, grep, awk?


Код:
nc localhost 7634
|/dev/disk/by-id/ata-TOSHIBA_HDWD120_97BM1XZGS|TOSHIBA HDWD120|40|C||/dev/sda|TOSHIBA HDWD120|40|C||/dev/disk/by-id/ata-ST3300622AS_4NF21ZKP|ST3300622AS|44|C||/dev/sdb|ST3300622AS|44|C|


Цитата:
 И вывод полученный с ними?


Код:
echo -e "sda\n$(nc localhost 7634 | sed 's/|//m' | sed 's/||/ \n/g' | grep 'sda' | awk -F '|' '{print $3}')°C"
sda
40°C

sdb такой же, только sda меняется на sdb в названии и grep
 
Добавлено:
iNNOKENTIY21

Код:
nc localhost 7634

Почему то дважды и с /dev/disk/by-id и /dev/sd* ??

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 14:55 08-06-2020
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21,
в строке повторяющиеся числа 40 и 44 это и есть значения градусов которые вы извлекаете? Почему спрашиваю - у меня ОС  отличается от вашей, а наличие таких конструкций sed и grep с таким выводом мне непонятны.
если да
 
echo -e "sda\n$(nc localhost 7634 | cut -d\| -f9)°C"
дает нужный результат?
или
echo "$(nc localhost 7634 | awk -F '|' '{print $7"\n"$4"°C""\n"$17"\n"$19"°C"}''"
 
в awk не силен, но уверен здесь поправят

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 17:11 08-06-2020 | Исправлено: los, 19:57 08-06-2020
iNNOKENTIY21



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

Цитата:
в строке повторяющиеся числа 40 и 44 это и есть значения градусов которые вы извлекаете? Почему спрашиваю - у меня ОС  отличается от вашей, а наличие таких конструкций sed и grep с таким выводом мне непонятны.  

да. это градусы.
 
localhost 7634 - это сервис hddtemp.service на указанном порту, пакет hddtemp
nc - это gnu netcat
команда nc localhost 7634 выводит всю нужную инфу за раз. дважды вызывать не спортивно, хотелось бы распарсить вывод сразу.
 
Такой вариант взял. Нужно, что бы за один вызов локалхоста, а тто не спортивно

Код:
echo "$(nc localhost 7634 | awk -F '|' '{print $7"\t"$4"°C""\n"$17"\t"$19"°C"}')"
/dev/sda        41°C
/dev/sdb        45°C

или такой

Код:
echo "$(nc localhost 7634 | awk -F '|' '{print $7"\t"$17"\n"$4"°C\t\t"$19"°C"}')"
/dev/sda        /dev/sdb
42°C            45°C

 
 
а без /dev/ ?
а что будет, если диск добавится?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 17:51 08-06-2020 | Исправлено: iNNOKENTIY21, 18:08 08-06-2020
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21,
что не так с первым? И куда подевались sed и grep?

Цитата:
а без /dev/ ?  

можно попробовать.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 18:16 08-06-2020
iNNOKENTIY21



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

Цитата:
что не так с первым?

фатальный недостаток я не знаком с cut
и его для второго диска надо снова вызывать?

Цитата:
И куда подевались sed и grep?

А без них же пашет, в вашем втором примере

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 19:35 08-06-2020
los

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

Цитата:
а без /dev/ ?  


Код:
awk -F '|' '{sub(/.{5}/,"",$7)sub(/.{5}/,"",$17);print $7"\t"$4"°C""\n"$17"\t"$19"°C"}'


Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 19:55 08-06-2020
iNNOKENTIY21



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

Код:
echo "$(nc localhost 7634 | awk -F '|' '{sub(/.{5}/,"",$7)sub(/.{5}/,"",$17);print $7"\t"$4"°C""\n"$17"\t"$19"°C"}')"
sda     41°C
sdb     44°C

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 21:08 08-06-2020
los

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

Код:
cat file | gsed 's/||/ \n/g' | grep 'sd[ab]' | cut -d\/ -f3- | awk -F '|' '{print $1 " " $3"°C"}'

выводит
sda 40°C
sdb 44°C
если работает используйте как шаблон.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 21:22 08-06-2020
iNNOKENTIY21



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

Цитата:
это должно работать при добавлении диска  

С этого надо было начинать!
Правда
Цитата:
bash: gsed: команда не найдена

но grep 'sd[ab]' решает +мой изначальный вариант

Код:
[user@manjaro-kde ~]$ echo -e "$(nc localhost 7634 | sed 's/|//m' | sed 's/||/ \n/g' | grep 'sd[ab]' | awk -F '|' '{print $1": "$3"°C"}')"
/dev/sda: 40°C
/dev/sdb: 44°C

 
Добавлено:
А если добавить и cut -d\/ -f3-, то вообще хорошо!

Код:
[user@manjaro-kde ~]$ echo -e "$(nc localhost 7634 | sed 's/|//m' | sed 's/||/ \n/g' | grep 'sd[ab]' | cut -d\/ -f3- | awk -F '|' '{print $1": "$3"°C"}')"
sda: 40°C
sdb: 44°C

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:12 08-06-2020
los

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

Цитата:
bash: gsed: команда не найдена

просто изменить на sed.

Цитата:
+мой изначальный вариант  

один вызов sed, как по мне, - лишний, плюс не убраны /dev/

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 22:21 08-06-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21, los
 
Вы шо тут на наркоманили за ужос такой?!
Лучше бы сразу показали что во что надо превратить

----------
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 | Отправлено: 23:03 08-06-2020
iNNOKENTIY21



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

Цитата:
просто изменить на sed.  

Спасибо. Так эта магия работает.
 
Добавлено:
О. Кого то разбудили
Alukardd

Цитата:
Вы шо тут на наркоманили за ужос такой?!  

Так это, предлагайте
 
Добавлено:
резюме

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 23:07 08-06-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
та хз, если пытаться сокращать буковки. то у вас и так достаточно коротко, но я бы дописал некоторое количество проверок.
а так можно аналог вашего выражения записать так:
Код:
gawk 'BEGIN{RS="[|][|]"; FS="[|]"} /sd[a-z]+/{print gensub("/dev/", "", 1, $1)": "$3"°"$4}' < /dev/tcp/127.0.0.1/7643

p.s. если GNU AWK нет, а есть только mawk, то тогда надо переписать gensub на обычный sub

----------
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 | Отправлено: 00:33 09-06-2020 | Исправлено: Alukardd, 11:08 09-06-2020
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd,
так бывает когда сталкиваются Unix и Linux

Цитата:
p.s. если GNU AWK нет, а есть только mawk, то тогда надо переписать gensub на обычный sub

Как эта конструкция будет выглядеть для awk, не gnu и mawk?
P.S.
'sd[a-z]', наверное, избыточно.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 10:31 09-06-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
sd[a-z] нужно. это ж вместо вашего grep'а.
 
Замена gensub выглядит так:

Код:
awk 'BEGIN{RS="[|][|]"; FS="[|]"} /sd[a-z]+/{sub("/dev/", "", $1); print $1": "$3"°"$4}' < /dev/tcp/127.0.0.1/7643


----------
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:08 09-06-2020
iNNOKENTIY21



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

Код:
[user@manjaro-kde ~]$ echo -e "$(nc localhost 7634 | awk 'BEGIN{RS="[|][|]"; FS="[|]"} /sd[a-z]+/{sub("/dev/", "", $1); print $1": "$3"°"$4}')"

А с:  < /dev/tcp/127.0.0.1/7643
bash: /dev/tcp/127.0.0.1/7643: В соединении отказано
 
Вчера подумал, что единицы измерения брать бы из вывода

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 12:55 09-06-2020
los

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

Цитата:
sd[a-z] нужно. это ж вместо вашего grep'а.  

имел ввиду что [a-z] много для Linux устройств. Не принципиально, но...

Цитата:
Замена gensub выглядит так:  

Linux у меня нет, а для
cat file | awk ....
где в file

Код:
|/dev/disk/by-id/ata-TOSHIBA_HDWD120_97BM1XZGS|TOSHIBA HDWD120|40|C||/dev/sda|TOSHIBA HDWD120|40|C||/dev/disk/by-id/ata-ST3300622AS_4NF21ZKP|ST3300622AS|44|C||/dev/sdb|ST3300622AS|44|C|

вывод отличается

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 13:44 09-06-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

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