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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вариант на sed-е.

Код:
sed -n '/^"[0-2][0-9]:[0-5][0-9]/s~^"\(.....\).*~\1~p;  
          /^"[0-9][0-9]*"/s~^\([^;]*;\)\{3\}"\([^;]*\)";"\([^;]*\)".*~\2 \3~p' $1

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

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

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
awk 'BEGIN{a=0} /^[[:digit:]]/ { print $1; if (a++) print "COMMAND"; next } { print }'

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 17:51 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;
                 if(i>0) print "COMMAND";
                 i++;
             }
             else {
             if($1~/^[0-9]/) { print $4,$5 };
             }
             }' $1
 

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

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть кусок исходного HTML-файла sampl:

Код:
<TABLE border=0 cellPadding=0 cellSpacing=1 width=100>^M
  <TBODY>^M
  <TR>^M
    <TD></TD>^M
    </TR>^M
  </TBODY>^M
</TABLE><TABLE border=0 cellPadding=0 cellSpacing=1 width=100>^M
  <TBODY>^M
  <TR>^M
    <TD></TD></TR></TBODY></TABLE>^M
<TABLE align=center bgColor=#ffffff border=0 cellPadding=1 cellSpacing=0 ^M
class=border width=400>^M
  <TBODY>^M
  <TR align=middle bgColor=#7ca9a9>^M
    <TD colSpan=2><B>Info</B></TD></TR>^M
  <TR CLASS=bg0>^M
    <TD width=150>login</TD>^M
    <TD width=250>TEST</TD></TR>^M
  <TR>^M
  <TR CLASS=bg0>^M
    <TD width=150><b>ID</TD>^M
    <TD width=250><b>00000</TD></TR>^M
  <TR>^M
  <TR CLASS=bg1>^M
    <TD>Баланс, грн</TD>^M
    <TD width=120><b>20.70</TD></TR>^M
  </TR>^M
  <TR CLASS=bg0>^M
    <TD>Тариф</TD>^M
    <TD>Мега</TD></TR>^M
  <TR CLASS=bg1>^M
    <TD>ФИО</TD>^M
    <TD>Иванов Иван Иванович</TD></TR>^M
  <TR CLASS=bg0>^M
    <TD>Адрес</TD>^M
    <TD>Урюпинск 12, 5 эт, кв. 2</TD></TR><TR CLASS=bg1><TD>Real IP</TD>^M
   <TD><b>19.11.1.1</b></TD></TR>  <TR CLASS=bg1>^M
    <TD>MAC</TD>^M
    <TD>0:0:4:0:2:dd</TD></TR>^M
  <TR CLASS=bg0>^M
    <TD>Телефон</TD>^M
    <TD><B>55-88-88</B></TD>^M
  </TR>^M
  <TR CLASS=bg1>^M
    <TD>Мобильный</TD>^M
    <TD><B>8-093-434-00-00</B></TD>^M
  </TR>^M
<!--  <TR CLASS=bg0>^M
    <TD>Онлайн</TD>^M
    <TD><font color=red>offline</font></TD>^M
  </TR>^M
  <TR CLASS=bg1>^M
    <TD>Последний заход</TD>^M
    <TD></TD>^M
  </TR>^M
-->^M
  <TR CLASS=bg0>^M
    <TD>Статус</TD>^M
    <TD><B><font color=green>включен</font></B></TD>^M
  </TR>^M
  <TR  CLASS=bg1>^M
    <TD>Зарегистрирован  </TD>^M
    <TD>2010-11-02</TD>^M
  </TR>^M
^M
</TBODY></TABLE>^M
<DIV style='HEIGHT: 1px'><SPACER HEIGHT='1' TYPE='block'></SPACER></DIV>^M
 class=border width=150>^M
  <TBODY>^M
  <TR align=middle bgColor=#7ca9a9>^M
    <TD colSpan=2><B>&nbsp;</B></TD></TR>^M
  <TR>^M
</body>^M
 

Нужно получить информацию в более читабельном виде.
Сделал так:

Код:
cat sampl | tr -d "\r\n" |\
sed 's/<\/TR>/<\/TR>\
/g' |\
sed 's/\(<TR[^>]*>\)/\
\1/g' |\
sed -n '/<TBODY/,/<\/TBODY>/{
           /<TR[ >].*<\/TR>/{
              s/<TR[^>]*>\(.*\)<\/TR>/\1/
              s/<TD[^>]*>//g
              s/<\/TD>//g
              s/<b>//g
              s/^[ ]*//
              p
           }
       }' | sed '/^[ ]*$/d'

Результат:

Код:
<B>Info</B>
login    TEST
ID    00000
Баланс, грн    20.70
Тариф    Мега
ФИО    Иванов Иван Иванович
Адрес    Урюпинск 12, 5 эт, кв. 2
Real IP   19.11.1.1</b>
MAC    0:0:4:0:2:dd
Телефон    <B>55-88-88</B>..
Мобильный    <B>8-093-434-00-00</B>..
Онлайн    <font color=red>offline</font>..
Последний заход......
Статус    <B><font color=green>включен</font></B>..
Зарегистрирован      2010-11-02..
 

Есть желание переделать одим седом.
Делаю так:

Код:
sed -n '/<TBODY/,/<\/TBODY>/{
 
           /<TR[ >]/,/<\/TR>/{
 
              /<TR[ >]/{
                 /<\/TR>.*<TR[ >]/!h
              }
 
              /<TR[ >]/!{
                 /<\/TR>/!H
              }
 
              /<\/TR>/{
                 /<TR[ >].*<\/TR>/!H
                 x
                 s/<TR[^>]*>\(.*\)<\/TR>.*/\1/
                 p
              }
 
           }
 
       }' sampl  

Результат:

Код:
  ^M
    <TD></TD>^M
....
  ^M
    <TD></TD>
  ^M
    <TD colSpan=2><B>Info</B></TD>
  ^M
    <TD width=150>login</TD>^M
    <TD width=250>TEST</TD>
  ^M
    <TD width=150><b>ID</TD>^M
    <TD width=250><b>00000</TD>
  ^M
    <TD>Баланс, грн</TD>^M
    <TD width=120><b>20.70</TD>
  ^M
    <TD>Тариф</TD>^M
    <TD>Мега</TD>
  ^M
    <TD>ФИО</TD>^M
    <TD>Иванов Иван Иванович</TD>
  ^M
    <TD>Адрес</TD>^M
    <TD>Урюпинск 12, 5 эт, кв. 2</TD>
    <TD>Урюпинск 12, 5 эт, кв. 2</TD></TR><TD>Real IP</TD>^M
   <TD><b>19.11.1.1</b></TD>
   <TD><b>19.11.1.1</b></TD></TR>  ^M
    <TD>MAC</TD>^M
    <TD>0:0:4:0:2:dd</TD>
  ^M
    <TD>Телефон</TD>^M
    <TD><B>55-88-88</B></TD>^M
..
  ^M
    <TD>Мобильный</TD>^M
    <TD><B>8-093-434-00-00</B></TD>^M
..
<!--  ^M
    <TD>Онлайн</TD>^M
    <TD><font color=red>offline</font></TD>^M
..
  ^M
    <TD>Последний заход</TD>^M
    <TD></TD>^M
..
  ^M
    <TD>Статус</TD>^M
    <TD><B><font color=green>включен</font></B></TD>^M
..
  ^M
    <TD>Зарегистрирован  </TD>^M
    <TD>2010-11-02</TD>^M
..
  ^M
    <TD colSpan=2><B>&nbsp;</B></TD>
 

Не знаю как убрать дубляжи строк - в одной строке могут быть одновременно теги </TR> и <TR>.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 16:36 11-03-2013 | Исправлено: kpp77, 16:37 11-03-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, kpp77
Попробуйте это извращение (прав был ув. Alukardd... )
sed -n -e "s/^[^<]*</</;s/>[^>]*$/>/;H;g;s/<TR[^>]*>/\x01/g;s/\n/ /g;h;tx;:x;s/<.TR>/\x02/g;T;:a;h;s/^[^\x01]*\x01\([^\x02]*\)\x02.*/\1/;T;s/<[^>]*>//g;s/^[\x01\x20]*//;p;g;s/^[^\x01]*\x01\([^\x02]*\)\x02//;ta;h;" sampl
Файл скрипта
Результат

Код:
 
 
 
Info
login TEST
ID 00000
Баланс, грн 20.70
Тариф Мега
ФИО Иванов Иван Иванович
Адрес Урюпинск 12, 5 эт, кв. 2
Real IP 19.11.1.1
MAC 0:0:4:0:2:dd
Телефон 55-88-88  
Мобильный 8-093-434-00-00  
Онлайн offline  
Последний заход  
Статус включен  
Зарегистрирован   2010-11-02  
&nbsp;
 

Проблема с вложенными <TR> (<TR> ... <TR> ... </TR> </TR>). Подумаю.

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 21:29 11-03-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Благодарю за вариант.
Есть вопросы:
Что за команда T?
В имеющейся у меня документации и в моей версии sed такой команды нет.
Система FreeBSD 8.2.
За идею замены тега на один символ (s/<TR[^>]*>/\x01/g s/<.TR>/\x02/g)- отдельное спасибо, хотя нужно быть уверенным что символ замены не встречается в тексте.
 
После очередного мозгового штурма, вырисовался вариант :

Код:
 
sed -n 's/^[^<]*</</
        s/>[^>]*$/>/
        H
        /<.TR>/!b
           x
           s/.*<TR[^>]*>\(.*\)<.TR>.*/\1/
           s/\n//g
           s/<.TD><TD[^>]*>/<-->/
           s/<[^>]*>//g
           /^[ ]*$/d
           p
           x
           s/.*<.TR>//
           h
       ' sampl

Со вложенностью тегов (<TR> <TR> </TR> </TR>) пока непонятно.
По идее нужна рекурсия - для произвольного числа вложений...

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 13:47 12-03-2013 | Исправлено: kpp77, 00:36 13-03-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, kpp77
Странно, что нет. Это условный переход, обратный t (если не было успешной замены.)
Второй вариант - без T и с вложениями. Проблема, что уровни вложенности печатаются в обратном порядке. Подробнее...
Третий вариант - уровни вложенности печатаются в правильном порядке. Но мне что-то не нравится Подробнее...
IMHO, \x01 \x02 в тексте встречаются редко. Это две рожицы. Посмотрите при помощи grep.
 
В Вашем варианте, кстати,  "/<.TR>/b obr;/<.TR>/!b end;: obr" можно заменить просто на "/<.TR>/!b"

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 19:06 12-03-2013
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Некоторые команды (T,R,W,Q...) есть только в GNU-шных версиях sed.
Также в не-ГНУшных реализациях недоступна замена по кодам символов ни в 16-ричной ни в 8-ричной системах...
К сожалению замены вида s/<TR[^>]*>/\x01/g s/<.TR>/\x02/g не подходят.
По поводу замены "/<.TR>/b obr;/<.TR>/!b end;: obr" на "/<.TR>/!b" - согласен, благодарю.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 00:24 13-03-2013 | Исправлено: kpp77, 00:33 13-03-2013
Alex_Piggy

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

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 01:31 13-03-2013 | Исправлено: Alex_Piggy, 01:32 13-03-2013
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужен скрипт:
1. Проверяем find-ом появление в папках новых файлов за  время последней проверки (10 минут), если есть выполняется п.2, если нет их - exit
2. Пингуем fping-ом удаленный хост, если не отвечает - exit.
3. rsync-ом отправляем новые файлы на удаленный хост.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 20:22 15-03-2013 | Исправлено: digital422, 09:09 16-03-2013
kpp77

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

Код:
#!/bin/sh
 
dir_name="$1"
host="$2"
dir_dist="$3"
user="$4"
 
# Проверяем find-ом появление в папках новых файлов за  время последней проверки (10 минут)
files="`find "${dir_name}" -type f -cmin 10 -print`"
# если нет их - exit
[ -n "${files}" ] || exit 1
 
# Пингуем fping-ом удаленный хост, если не отвечает - exit.
[ -n "`fping -u "${host}"`" ] && exit 2
 
# rsync-ом отправляем новые файлы на удаленный хост.
for file in ${files}
do
   rsync --progress --partial -avz "${file}" ${user}@${host}:"${dir_dist}"
done


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

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тогда нужно сохранять список "старых" файлов и при очередном запуске скрипта отбирать "новые" файлы.
 
Добавлено:

Код:
#!/bin/sh
 
dir_name="${1}"
host="$2"
dir_dist="$3"
user="$4"
 
temp_list="./temp_list"
obrab_list="./obrab_list"
 
# сохраняем список всех файлов на момент запуска скрипта
find "${dir_name}" -type f -print | sort > "${temp_list}"
 
if [ -f "${obrab_list}" ]; then
  # отбор новых файлов
  files="`join -a1 -t"<>" "${temp_list}" "${obrab_list}" | grep -v "\t"`"  # здесь "<>" - табуляция
else
  files="`cat "${temp_list}"`"
fi
# если новых файлов нет - exit
[ -n "${files}" ] || exit 1
 
# Пингуем fping-ом удаленный хост, если не отвечает - exit.
[ -n "`fping -u "${host}"`" ] && exit 2
 
# rsync-ом отправляем новые файлы на удаленный хост.
for file in ${files}
do
  rsync --progress --partial -avz \"${file}\" ${user}@${host}:\"${dir_dist}\"
  # добавить новый файл в список обработанных файлов
  echo "${file}>0" >> "${obrab_list}" # здесь ">" - табуляция
done
 
# отсортировать список обработанных файлов для корректной работы join
sort "${obrab_list}" > "${obrab_list}"_
mv "${obrab_list}"_ "${obrab_list}"
 

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
похоже в строке где команда join есть ошибка, происходит команда на выполнение когда нет новых файлов. после -t поставил один Tab. файл obrab_list заполняется результатами  find, в строках с новым файлам появляется через Tab символ 0, даже когда нет новых файлов. Для отладки временно убрал fping и rsync, оставил только строку: # добавить новый файл в список обработанных файлов, изменив {file} на {files} .

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

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

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

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

Код:
 
#!/bin/bash
 
mv "${file_list}-0" "${file_list}-1"
find "$INPUT" -type f -printf "%f\n" | sort > "${file_list}-0"
fgrep -v -f ${file_list}-1 ${file_list}-0 > ${file_list}.new
CC=$(cat ${file_list}.new | wc -c)
 
if [ $CC -ne 0 ]; then
    echo "Run rsync script"
fi
 
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 18:50 28-03-2013
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, хочется странного.
А именно, можно ли как-то при работе awk задействовать команды самого bash`а? Поясню на примере. Сформировали список файлов:

Код:
 
/home/user/test/dir1/1.pdf
/home/user/test/dir1/111.pdf
/home/user/test/dir2/58.jpg
 

И хочется все файлы переименовать по шаблону, где в имени будет bcgjkmpjdfyf команда $(date +%Y%m%d-%N). То есть должно получиться нечто подобное:

Код:
 
/home/user/test/dir1/dir1-20130408-201644893.pdf
/home/user/test/dir1/dir1-20130408-278332343.pdf
/home/user/test/dir2/dir2-20130408-101116548.jpg
 


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

Всего записей: 6714 | Зарегистр. 29-04-2009 | Отправлено: 23:34 08-04-2013 | Исправлено: urodliv, 23:35 08-04-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Ну, во-первых, date — это не комнда Баша.  
 
Во-вторых, можно.
$ gawk 'BEGIN {"date +%Y%m%d-%N" | getline; print}'
20130408-821030935

 
А в-третьих, могу заметить, что у GAWK’а есть функция strftime(). Доли секунды через нее, правда, не вывести, но они же вам нужны как случайное число, а не как время, так что можно использовать rand()
$ gawk 'BEGIN {print strftime("%Y%m%d")}'
20130408

 
P. S. Мысль насчет rand() — неудачная. Для затравки (srand()) генератора тоже используется время с точностью до целой секунды. Можно, конечно, ему /dev/urandom скормить, но это неоправданно сложнее.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:59 08-04-2013 | Исправлено: ASE_DAG, 00:07 09-04-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