нужна помощь по gawk

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

нужна помощь по gawk

Сообщение Ленивая Бестолочь »

к стыду ничего в нем не понимаю :-(

есть у нас один старый скрипт:

Код: Выделить всё

......
 bp="/home/swift/arch/"ARGV[1]"/"
 while("find "bp" -type d -maxdepth 1|sort -t/ +5"|getline){
.......
}


он прекрасно работает со старым гавком (debian 3.0)
а в новом похоже, что переменная bp не раскрывается, а вместо этого
команда
find "bp" -type d -maxdepth 1|sort -t/ +5
разбивается на несколько частей и выполняется отдельно, т.к. мы имеем ошибку:
sh: -type comand not found

если есть знающие awk люди - подскажите, пожалуйста - как поменять эту конструкцию на правильную.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 887
ОС: gentoo

Re: нужна помощь по gawk

Сообщение vr13 »

у вас дело не в awk, а в sort. теперь констркуции +/- не поддерживаются по умолчанию, но заставить - можно :)
почитайте man
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: нужна помощь по gawk

Сообщение Ленивая Бестолочь »

к сожалению, если sort убрать то та же проблема :-)

вот собсно из тех же скриптов (их там много) аналогичная конструкция, но с "правильным" sort-ом:

Код: Выделить всё

manager4:/home/swift/cgi-bin# cat ./years
#!/usr/bin/awk -f

BEGIN{
 print "Content-type: text/html; charset=koi8-r"
 print ""
 print "<BODY>"
 print "<H1 ALIGN=\"CENTER\">Месяцы обмена сообщениями </H1> <P>"
 print "<UL>"
 bp="/home/swift/arch/"
 while("find "bp" -maxdepth 2 -type d|sort -t/"|getline){
  $0=substr($0,length(bp)+1)
  if($0~/^$/)continue
  if(length($0)<=3)print "<P><LI> Год "substr($0,1,2)"<P>"
  else{
   print "<A HREF=\"/cgi-swift/days?"$0"\""">"substr($0,4)"</A>"
  }
 }
 print "</UL>"
 print "</BODY>"
}
manager4:/home/swift/cgi-bin# ./years
Content-type: text/html; charset=koi8-r

<BODY>
<H1 ALIGN="CENTER">Месяцы обмена сообщениями </H1> <P>
<UL>
sh: -maxdepth: command not found

<тут висим и очень грузим процессор до бесконечности>
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 887
ОС: gentoo

Re: нужна помощь по gawk

Сообщение vr13 »

на самом деле, я хотел сказать лишь то, что

Код: Выделить всё

gawk 'BEGIN { bp="./tmp"; while("find "bp" -maxdepth 1 -type d|sort -t/ +5"|getline) { print $1 } }'


завершится с ошибкой, а

Код: Выделить всё

_POSIX2_VERSION=1 gawk 'BEGIN { bp="./tmp"; while("find "bp" -maxdepth 1 -type d|sort -t/ +5"|getline) { print $1 } }'


проработает нормально

разумеется, полностью воспроизвести весь ваш пример я не могу :)
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: нужна помощь по gawk

Сообщение Ленивая Бестолочь »

ух ты.
это уже похоже на то, что мне нужно, спасибо :-)

правда к сожалению у меня оба примера не работают - оба входят в бесконечный цикл (похоже)
то бишь - черный экран, курсор внизу и т.п.

на всякий случай поменял "./tmp" на "/tmp", убрал "type d" - все то же самое.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: