URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 120365
[ Назад ]

Исходное сообщение
"Новая версия интерпретатора GNU Awk 5.1 "

Отправлено opennews , 18-Апр-20 11:04 
Представлен новый значительный выпуск реализации языка программирования AWK от проекта GNU - Gawk 5.1.0. AWK был разработан в 70-х годах прошлого века и не претерпел значительных изменений с середины 80-х годов, в которых был определен основной костяк языка, что позволило на протяжении последних десятилетий сохранить первозданную стабильность и простоту языка. Несмотря на преклонный возраст, AWK до сих пор активно используется администраторами для выполнения рутинных работ, связанных с разбором различного рода текстовых файлов и генерацией несложной результирующей статистики...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=52761


Содержание

Сообщения в этом обсуждении
"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 11:04 
К системд забыли привязать.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 13:58 
Это system:D привязана к awk!

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:21 
Systemd к GNU имеет отношение чуть более, чем никак. У них есть собственный системный менеджер Guix.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 14:40 
> системный менеджер Guix

"Пакетный", тупица!!!)) А то, о чем ты хотел поведать, называется GNU Shepherd.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:42 
Да, извини, описался :)

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 11:14 
Часто используете?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 11:23 
да

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 14:48 
Предъявите.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 13:26 
А какие варианты? Ну не sed же, в самом деле)) Конечно, можно бы и Perl, но зачем, если есть специализированный инструмент.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 13:53 
Сед норм. Кроме того баш имеет встроенные регулярки, можно избежать лишних внешних вызовов, что намного быстрее и меньше грузит. А 99% кода awk заключается в вывести энный элемент энной строки, всё равно вся логика в баше. В awk можно запихнуть разве что скрипт разбора, но никакого смысла этого делать, если ты умеешь в регулярки.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 14:04 
>баш имеет встроенные регулярки, можно избежать лишних внешних вызовов

но dash побыстрее будет в несколько раз


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:12 
>>баш имеет встроенные регулярки, можно избежать лишних внешних вызовов
> но dash побыстрее будет в несколько раз

Ну не в несколько… В баше всё же намного больше фич, по классике придётся городить жуткие конструкции. Я сравнивал время, башизмы были намного быстрее вызова внешнего кода. Нагрузку не сравнивал правда.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 14:17 
>В баше всё же намного больше фич

Можна пример?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:56 
>>В баше всё же намного больше фич
> Можна пример?

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


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 15:17 
Да както ничего прорывного кроме большего функционала read не увидел.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 15:42 
Я что-то попробовал найти в интернете сравнения или хотя бы перечень башизмов и не смог этого сделать. В моём man bash хорошо описаны все возможности, посмотри повнимательней и сравни с обычными переносимыми (различий довольно много, не понимаю, в чём проблема выделить все непереносимые конструкции в 1 список, а не в 10).

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 21:50 
Извините, но ваш баш говно.
PRINT(){
echo "$11"
}
PRINT +1+ +2+ +3+ +4+ +5+ +6+ +7+ +8+ +9+ +10+ +11+ +12+

Какого оно "$11" воспринимает как "${1}1"?

Или я шото пропустил и bash не является POSIX совместимым интерпритатором шел кода?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 22:09 
Хз при чём тут баш. Man shift может.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:03 
[[ $VAR =~ .*regexp.* ]]

arr=(1 2 3)
echo ${arr[1]}

echo {01..09}

set -o pipefail

cmd <<<$VAR

for (( i = 0; i < 10; i++ )); do echo $i; done

trap 'echo was err' ERR

date | tee >(md5sum)

( flock -n $FD || { echo "locked"; exit 1; }; echo do work; ) {FD}>/tmp/my.lockfile


то что сходу вспомнилось, можно ещё это посмотреть https://www.gnu.org/software/bash/manual/bash.html#Major-Dif...


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:25 
>но dash побыстрее будет в несколько раз

Но bash в дистрах изкоробки. Ну кроме тех, где busybox.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 14:31 
>Но bash в дистрах изкоробки.

Это диверсия для внедрения system:D


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено анонимуслинус , 19-Апр-20 01:58 
баш и авк в линухе столько же примерно сколько и сама система. думайте головой когда пишите. системд тогда и в проекте не было. и кстати очень хорошая и привычная оболочка. именно поэтому есть везде. а для обработки логов и прочего оч хорошо работает sed в связке с другими стандартными программами, с той же bc к примеру. просто народ после окон все хотят также в одном флаконе)) а линь изначально был приспособлен к работе сотен мелких прог друг с другом через те же конвееры(|) к примеру.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 14:49 
dash глючен, увы.  Рассказывал уж и пример случая, который сам поймал, приводил.  Апстрим в курсе, забил (можете объяснить тем, что все ушли тащить в дебиан systemd, мне без разницы).

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено myhand , 18-Апр-20 14:54 
> Рассказывал уж и пример случая

Например.

> Апстрим в курсе, забил

В смысле?  Вы открыли баг - и его закрыли?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 19:17 
Что удивительно, минут за десять в архивах почты и жаберной переписке с майнтейнером так и не нашёл, но это точно было что-то с read в цикле вроде такого: http://bugzilla.altlinux.org/21229

Помнится, Лёша тогда и отмечал -- мол, знают, но не чинят.  После чего я идти вешать уже не стал.  Давайте так: если кто-то жаждет принять участие в исправлении, могу порыться ещё, потому что баг пришлось обходить.  А пока вещдоков выложить не могу -- остаётся моё слово малость заинтересованного (в том, чтоб всё же работало так или иначе).

PS: сборочная система dash тоже хрупкая -- на такое и я с lcc напоролся вслед за другими с другим: http://bugzilla.altlinux.org/31754

PPS: вдруг кому-то пригодится перловый парсер sh/bash, раз уж наткнулся в своих архивах на ссылку:

> не могу удержаться: https://github.com/dmage/shell_parser
> мой коллега на спор написал парсер шелла
> при этом задача не выполнить, а проанализировать
> это открывает целый ряд возможностей
> этот парсер может определить нужен ли bash или это dash
> кстати, он нашёл отклонения в стандарте в dash :)
> при этом у этого парсера очень мало внешних зависимостей
> Коллега довёл парсер до состояния, что он без проблем парсит
> posix-совместимый шелл. даже configure'ы осиливает :)

И ещё занятное (восстановил/разбил цитату, чтоб форум её снова не порезал)
> кстати, узнал, что конструция: for a; do :; done неправильная с точки зрения posix
> ';' после a не должно быть
> но оказывается, что все шеллы это понимают
> хотя в грамматике шелла это недопустимо


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено myhand , 19-Апр-20 09:11 
> После чего я идти вешать уже не стал.

Вот и все что надо знать о взаимодействии ALT с апстримами.

> PS: сборочная система dash тоже хрупкая -- на такое и я с
> lcc напоролся вслед за другими с другим: http://bugzilla.altlinux.org/31754

Вот негодяи!  Исправили Мишин баг еще в 2014-м годе:
https://git.kernel.org/pub/scm/utils/dash/dash.git/commit/sr...

А в ALT сообщить забыли...  И в домоуправление!

>> кстати, он нашёл отклонения в стандарте в dash :)

Его не Неуловимый Джо завут?

>> кстати, узнал, что конструция: for a; do :; done неправильная с точки зрения posix

По-моему, никакого набора стандартных тестов для соответствия POSIX в
части Shell & Utilities - нету.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 18-Апр-20 16:03 
Я бы хотел увидеть пример. У меня дома /bin/sh -> dash и не нарадуюсь. Я от Глеба слышал, что в каком-то особо извращённом случае dash, по мнению Глеба, вёл себя некорректно. Но примера не видел и dash мне это использовать не мешает.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:15 
Я тоже после некоторых событий /bin/sh -> zsh и не нарадуюсь. Потому что баш в определённом случае (не особо извращённом, просто более сложном, чем обычно принято писать на баше -- я всё пишу на шелле, хаха (не всё, шелл сдулся, когда понадобилось с zero-terminated строками работать)) вёл себя некорректно (не мой взгляд).

Если бы не килотонны башизмов, я бы тоже может использовал даш, а там уже и находил его баги. Для интерактивного шелла zsh на 3 головы выше всех конкурентов, это понятно, но и в скриптах зшизмы весьма оказались удобны. А в чём смысл отказываться от дополнительных возможностей? Тормоза ведь не в шелле, а во внешнем коде…


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:17 
>с не zero-terminated строками

selffix, нужно было прочитать байты из файла и это оказалось несколько осложнено, потому что байты начинались с \0.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 19:22 
> Я бы хотел увидеть пример.

Насколько припоминаю -- что-то вроде IFS=... while read . . .; do ...; done < ...; он _точно_ был в архивах, но к своему удивлению я сейчас не нашёл ни баги, ни письма, ни переписки в жабере именно с зафиксированной воспроизводилкой (на которую тогда некоторое время ушло, чтоб отловить и сузить).


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 14:11 
> Сед норм.

Не, когда нужно учитывать и структуру документа, а не парсить 1 абзац, то делать это sed'ом я бы и пробовать не стал.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:15 
>> Сед норм.
> Не, когда нужно учитывать и структуру документа, а не парсить 1 абзац,
> то делать это sed'ом я бы и пробовать не стал.

Как правило это даже не один абзац, а одна строка. Ну всегда несколько регулярок можно исполнить в 1 седе, если одного мало. У авк тот построчный разбор, что и у шела.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 14:18 
Человеку тоже свойственно читать построчно :) Так что это как раз Ок?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 14:50 
Воспринимаю awk и особенно sed всё-таки именно поточные строковые инструменты; если надо разбирать структуру, это другой класс задач (хотя, разумеется, нахимичить и такое бывает можно и на sed/awk).

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:20 
sed - да (хотя и на нем можно, но выглядит ужасно), а на awk вполне удобно все делается, если изучить его чуть глубже, чем /pattern/ { print $1 }.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 19:23 
> sed - да (хотя и на нем можно, но выглядит ужасно), а
> на awk вполне удобно все делается, если изучить его чуть глубже,
> чем /pattern/ { print $1 }.

Потому и "и особенно". :)  Коллега и до недавних пор сосед по комнате очень любит awk, показывал занятные штуки из своей практики на нём.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 14:51 
> Человеку тоже свойственно читать построчно :) Так что это как раз Ок?

Но только машина не человек. Просто потом в авк всё равно всё тот же шел с теми же самыми регулярками получается. Но может я как-то не так использую. Авк несомненно нужен, если баша нет, но он всё же внешняя утилита относительно шелла. Или писать всё на авк, или писать уже на шелле. 99% времени стараюсь использовать авк только чтобы распечатать столбец. (:


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 18-Апр-20 16:06 
Awk нужен для одной простой вещи: работы с полями. Средствами голого bash это очень неудобно и в ряде случаев просто невозможно. Ну простая задача: вывести поле с заданным номером. На awk это просто { print $i }, а на bash? Да, можно вырезать с помощью cut, но это неудобно и это уже не bash.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 16:55 
Можна пример сложного текста для парсинга, шобы чесно было?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 18-Апр-20 17:23 
> Можна пример сложного текста для парсинга, шобы чесно было?

Да тут любого текста хватит, например: https://www.gnu.org/licenses/gpl-3.0.txt

Напишите код на bash и только на bash без использования внешних утилит (можно использовать bash builtin), которая выведет для каждой строки i-е поле, если оно существует. Поля разделяются произвольным числом пробелов. В рамках данного примера это i-e слово с прилегающими знаками пунктуации и иными символами, если они есть. Отсчёт полей с 1.

На awk это просто:
print $i

На bash тоже можно сделать, но мороки намного больше и сильно медленне работать будет:
while read -a a; do echo "${a[$((i-1))]}"; done


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:19 
#!/bin/bash
exec 3<> /dev/tcp/www.gnu.org/80
if (($?)); then
    echo "Error!"
    exit 1
fi
printf "GET /licenses/gpl-3.0.txt HTTP/1.0\r\n" >&3
printf "Host: www.gnu.org\r\n" >&3
printf "Connection: close\r\n\r\n" >&3
while IFS= read L <&3 ; do
    A=($L)
    echo "$L"
    echo ${A[2]}
done
exit 0

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 18-Апр-20 21:35 
>Напишите код на bash и только на bash без использования внешних утилит (можно использовать bash builtin), которая выведет для каждой строки i-е поле, если оно существует. Поля разделяются произвольным числом пробелов. В рамках данного примера это i-e слово с прилегающими знаками пунктуации и иными символами, если они есть. Отсчёт полей с 1.

Пишу на чистом шеле по этому вот для dash или sh (на забагованом /bin/bash не работает, шо ещо раз подтверждает шо он из говнокода).
Это элементарно делается, при чом многими способами, вот один из них, щитай нативный:
#!/bin/dash
AWK(){
eval "print(){
echo \"\$$1\"
}"
while read cat
do
print $cat
done  < $2
}
AWK 2 /home/gpl-3.0.txt


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 20-Апр-20 18:27 
А я разве говорил, что не делается? Делается. Только сравните свой код с:
  awk '{ print $i }' gpl-3.0.txt
И подумайте. А ещё можно скорость работы сравнить на файлах побольше.

Внимание, вопрос: зачем использовать существенно более громоздкий и более медленный код?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 20-Апр-20 18:45 
> А я разве говорил, что не делается? Делается. Только сравните свой код
> с:
>   awk '{ print $i }' gpl-3.0.txt
> И подумайте. А ещё можно скорость работы сравнить на файлах побольше.
> Внимание, вопрос: зачем использовать существенно более громоздкий и более медленный код?

В случае многократного запуска awk будет существенно тормозить работу shell програмы.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 20-Апр-20 21:23 
1. Не так уж и сильно, если mawk использовать — он лёгкий.
2. На больших файлах это совершенно не важно.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено VINRARUS , 20-Апр-20 22:38 
> А я разве говорил, что не делается? Делается. Только сравните свой код
> с:
>   awk '{ print $i }' gpl-3.0.txt

К стати, а мой код то короче:
AWK $i gpl-3.0.txt
Могу название функцыи укоротить даже до 1 буквы :)

> 1. Не так уж и сильно, если mawk использовать — он лёгкий.
> 2. На больших файлах это совершенно не важно.

Ну во первых с помощью shell можна анализировать текст таким образом который просто не возможен на awk, а во вторых чем меньше файлы, и больше их количество, тем более рацыонально  вместо awk использовать аналогичную shell конструкцыю — банально из за экономии времени на рожание ядром нового запущеного процеса.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:04 
Cut определённо проще и легче. И у него меньше внешних зависимостей.

Awk относительно удобен для чего-то такого, но опять же, куда лучше на сед заменить.

| awk 'NR=='"$mainpl"'+1{print substr($12,1,10);}'


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним84701 , 18-Апр-20 18:36 
> Cut определённо проще и легче. И у него меньше внешних зависимостей.

https://packages.debian.org/bullseye/mawk
dep: libc6


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:14 
S="abc def ghi"
A=($S)
for ((I = 0; I < ${#A[@]}; I++)); do
    echo ${A[ I]}
done

S="abc;def;ghi"
IFS=';'
A=($S)
for ((I = 0; I < ${#A[@]}; I++)); do
    echo ${A[ I]}
done

служебный тэг code сломан, потому [ I]


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 19:36 
> Ну простая задача: вывести поле с заданным номером.
> На awk это просто { print $i }, а на bash?

set a b c d e f g h i j k l; i=10; eval echo \${$i}
(ой, молчи, я и так знаю всё, что ты хочешь сказать по этому поводу ;-)

PS: на любимом ресурсе одного из старожилов подсказывают, что в случае bash есть ещё variable indirection, про который я в мане не замечал:

---
#!/bin/bash
n=3
echo ${!n}
--- http://stackoverflow.com/questions/1497811/how-to-get-the-nt...


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 18-Апр-20 11:50 
вместе с http://github.com/cheusov/runawk превращается в почти полноценный мощный язык программирования.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 12:53 
Автор профиля на опеннете и автор репозитория один и тот же человек. Совпадение? Не думаю.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 18-Апр-20 13:52 
> Автор профиля на опеннете и автор репозитория один и тот же человек.
> Совпадение? Не думаю.

нет, не совпадение. Я -- автор runawk, и довольно много писал и пишу на awk+runawk


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 14:57 
Более того, это очень крутой человек -- Лёша Чеусов. :)

Кстати, надо бы http://packages.altlinux.org/runawk до 1.6.1 обновить (#250191).


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 22:43 
Интересно, а Алексей не был против такой выдачи соответствия его ника реальному имени?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 00:30 
Насчет фио -- на здоровье. Насчет крутого -- ну, леша как леша.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено ffirefox , 19-Апр-20 06:21 
Из readme проекта:
author:                                  Aleksey Cheusov <vle@gmx.net>


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 00:31 
Для любителей awk штука очень полезная, и ничего не портит, так что вы там смотрите. Давно стабильно работает.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено neAnonim , 18-Апр-20 13:47 
мне не хватило мотивации в свое время искать учебники и примеры по awk.

если у вас есть рекомендации сейчас самое время.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 18-Апр-20 13:58 
> мне не хватило мотивации в свое время искать учебники и примеры по
> awk.
> если у вас есть рекомендации сейчас самое время.

Я не видел ничего лучше книжки Аарона Робинса же, ментейнера gawk.
https://www.amazon.com/GAWK-GNU-AWK-Users-Guide/dp/188211427...

Хотя у меня была другая обложка, красная.

Наверное, можно и Брайна Кернигана почитать.
https://www.amazon.com/AWK-Programming-Language-Alfred-Aho/d...

хотя его изначальная реализация и POSIX не очень дружат. Возможно,
в последнее время исправили. Точно многое исправляли в NetBSD.
Сейчас все те же люди допилоивают ее здесь
https://github.com/onetrueawk/awk


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 13:59 
> учебники и примеры по awk

Пфф! Все упирается в класс задач, которые ты собираешься решать. Для рядовых/повседневных никаких "учебников" точно не нужно, а примеров в инторнетах завались.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 18-Апр-20 14:06 
>> учебники и примеры по awk
> Пфф! Все упирается в класс задач, которые ты собираешься решать. Для рядовых/повседневных
> никаких "учебников" точно не нужно, а примеров в инторнетах завались.

в свое время обучал коллег (не программистов) awk, shell и ruby. Мне это странно, но "логика" data-driven awk не программистам не очень зашла. Гораздо более сложный ruby они поняли как-то быстрее.

Так что учебники все же нужны.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Ordu , 18-Апр-20 14:32 
> мне не хватило мотивации в свое время искать учебники и примеры по awk.

info gawk?

Там вроде и с примерами, и как справочное пособие можно использовать, и под рукой всегда.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vdb , 18-Апр-20 13:54 
> вместе с http://github.com/cheusov/runawk превращается в почти полноценный мощный язык программирования.

Зачем нужен «почти полноценный», когда есть полноценный Perl, без всяких «почти»?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 18-Апр-20 14:02 
>> вместе с http://github.com/cheusov/runawk превращается в почти полноценный мощный язык программирования.
> Зачем нужен «почти полноценный», когда есть полноценный Perl, без всяких «почти»?

скрипты на awk почти всегда оказываются сильно быстрее, чем такие же на ruby, python, perl, lua etc. Мне в свое время нужно было молотить сотни мегабайт текста, и это имело смысл.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:13 
Это потому что во времена разработки sed и awk умели программировать эффективные движки регулярных выражений. Ко временам Perl и прочих Java это сакральное знание было утеряно :-)

https://swtch.com/~rsc/regexp/regexp1.html


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 00:35 
Все верно. И поэтому тоже, но не только. Просто сам по себе интерпретатор gawk быстрее.
Кроме того, в силу убогости самого языка программирования структуры данных выбираются максимально простые и быстрые. И data-driven подход добавляет скорости в силу своей простоты.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 14:03 
Там сложнаа))) Ну действительно, Perl полноценный ЯП, и на его изучение потребуется больше усилий, чем на то, чтобы освоить awk.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Crazy Alex , 19-Апр-20 04:37 
Не факт. Я в своё время прочёл верблюжью книгу и пошёл писать на перле, чем и зарабатывал какое-то время. А авк с седом раза четыре освоить пытался, но забывалось за два дня. Перл, в силу того, что он один язык, выучить проще, чем по отдельности шелл, сед и авк, плюс он (как бы некоторым ни казалось странным) имеет очень человеческую логику и по нему легко отрастает интуиция.

В итоге моё правило - всё, в чём больше одного условия или пяти строк - писать на перле или питоне, если условия позволяют. Так по итогу и писать удобнее и осознавать через пол-года что это вообще было.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено bircoph , 18-Апр-20 16:08 
Ух ты, не знал про runawk, спасибо, буду щупать.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:36 
quicksort и heapsort на awk порадовали :-)

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 00:36 
ну, в nawk их нет :-/

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Ю.Т. , 18-Апр-20 13:15 
Всё-таки namespace в 5-й серии -- тоже значительное изменение.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 13:21 
Заголовок звучит угрожающе))

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено ssh , 18-Апр-20 13:49 
> Заголовок звучит угрожающе))

Думаешь если гнут авк, то cut и вовсе разрывают на куски?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Michael Shigorin , 18-Апр-20 15:01 
Голодные cat'ы. :)

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 15:17 
Awk сила, sed могила :)

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:08 
Awk неплох, но только на csv или tsv файлах.

Чуть более сложные структуры, и бери в руки perl.

Смысл тратить время на брдания с awk?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:38 
awk есть везде (кастрированный - даже в бизибоксе), удобно по-быстрому однострочник написать, когда sed-а не хватает.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:48 
Это когда не хватает sed, но хватает awk?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:02 
Когда надо напечатать третью колонку.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:20 
Например, есть csv/tsv, и надо посчитать сумму числовых значений в столбце X таких строк, где в столбце Y значение удовлетворяет регулярному выражению.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено ssh , 19-Апр-20 09:08 
> Это когда не хватает sed, но хватает awk?

Вот-вот, аж поперхнулся от высказывания предыдущего оратора. ^^


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:16 
> Чуть более сложные структуры, и бери в руки perl.

Почему perl, а не whatever else? Зачем нужен perl для ЧУТЬ более сложных структур, если есть язык X для ЧУТЬ более с СОВСЕМ сложных структур.

А для всего остольного есть awk.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:26 
Это возрастное.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:18 
За счёт аргументов интерпретатора perl удобнее для однострочников чем например python

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 23:47 
Потому что perl есть везде из коробки и прост, как грабли.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 00:08 
> perl есть везде из коробки

Где везде?

> и прост, как грабли.

Прост? Что в нем простого? Написан он как говно, если вы его исходный код читали. Сам язык - тоже говно.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Crazy Alex , 19-Апр-20 04:45 
Сам язык крайне прост для освоения на начальном этапе (достаточно одну книжку прочесть), имеет великолепную документацию и адски гибок если залезть чуть дальше - туда, где blessed variables, tied hashes и препроцессинг кода, плюс имеет совершенно чудовищное количество модулей на все случаи жизни.

Большой софт на нём только писать не надо - не для того он. А вот автоматизация всякая - отлично до сих пор идёт, сегодня вон ляпал скриптик для выдёргивания по z39.50 библиотечных данных для своей подборки книг - самое то.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 20:39 
> Сам язык крайне прост для освоения на начальном этапе (достаточно одну книжку прочесть),

Бле, с верблюдом шоле на 1к страниц? Вот по awk книжек читать не надо.

> адски гибок если залезть чуть дальше - туда, где blessed variables

Все же адски урод, а не гибок.

> А вот автоматизация всякая - отлично до сих пор идёт, сегодня вон ляпал скриптик для выдёргивания по z39.50 библиотечных данных для своей подборки книг - самое то.

Ну вот я и говорю, что это write-only язык.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:16 
> Awk неплох, но только на csv или tsv файлах.

Вы же в курсе что по стандарту CSV вот это тоже валидный CSV из одной записи и пяти колонок:
1,2,"foo ""3""
bar",4,5

?

Как вы это на awk парсите, можно посмотреть?


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:21 
Это microsoft-овский csv, его придумывали не очень умные люди.
Формат вида /etc/passwd с единственным способом экранирования разделителя намного более практичен.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 15:22 
> Это microsoft-овский csv

Кто вам сказал такую чушь?

Это https://www.ietf.org/rfc/rfc4180.txt к microsoft никакого отношения не имеет и более того microsoft не поддерживал его в своём excel (починили сейчас или нет, не знаю).


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 23:40 
Этот rfc написан в 2005 году и лишь фиксирует статус кво.
CSV в виде "строка с разделителем" существовал, конечно, еще со времен перфокарт. А вот с кавычками и их удваиванием придумали в Microsoft, еще в самых ранних версиях Excel.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:35 
В Gnu AWK есть FPAT, с ним все парсится легко.

https://www.gnu.org/software/gawk/manual/html_node/Splitting...


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 17:21 
Увы, нет, по вашей же ссылке написано:

NOTE: Some programs export CSV data that contains embedded newlines between the double quotes. gawk provides no way to deal with this. Even though a formal specification for CSV data exists, there isn’t much more to be done; the FPAT mechanism provides an elegant solution for the majority of cases, and the gawk developers are satisfied with that.

Стандартный RFCшный CSV даже на gawk не распарсить.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 23:36 
Очевидно, что при построчном чтении распарсить случай с CRLF внутри кавычек не получится.

Если очень уж хочется поддерживать этот кейс, никто не запрещает считать кавычки и конкатенировать со следующей строкой и так далее, пока не получится полная csv-строка.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 23:50 
Никак. Я awk не пользуюсь, ибо не понимаю, зачем мучить себе мозг упоротыми конструкциями 70 летней давности. Тогда это было круто, и более не было ничего, но сейчас-то у нас есть перл и питон.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:46 
Постоянно использую awk/gawk, sed, иногда и на баше текст форматирую, но если честно для 2020 это лютая дичь.
Синтаксис отвратный, привыкал долго, даже после привыкания читать сложный sed быстро не получается, а баш с вовсе всегда по символу разбираю.
Ну и самое главное это работа с несколькими строками - вторую, третью строчку после совпадения ещё можно как то заменить, но уже превращается в ад. Редактировать более сложные штуки (вроде сдвинуть на таб весь абзац начиная с нужного тега) лучше и не начинать(с башем и простые штуки становятся сложными). С помощью вима это сделать проще и в принципе проблем с ним нет.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 17:56 
Добавлю про перл - работает дольше, принципиальной разницы с awk нет, синтаксис чуть чище и приятнее, но надо знать пару наркоманских трюков для однострочников. Гораздо лучше awk если проблему решает одна из стандартных библиотек. Но он не развивается, лично я жду когда его закопают и ничего нового на нем не пишу, включая однострочники(тяжело вспоминать).

Питон - то же самое, но писать нужно ощутимо больше чем на perl, но и стандартные либы лучше и тк итак периодически его использую не для редактирования текста, то проблем с вспоминанием нет.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:04 
Это ты не развиваешься. Перл теперь называется Raku и развивается теперь даже быстрее кобола.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:19 
Чаще посещайте церковь святого Ларии Уолла, кинувшего людей с 5 перлом. А вообще надеюсь, что он постепенно умрет.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:23 
Дважды победитель на международном конкурсе запутанного кода? Да он мой кумир.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 00:10 
Чтобы ты всю жизнь работал с такими кумирами.

Ну именно такой perl и есть: write-only язык. И любят его как раз те, кто пишет одноразовые простыни.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:21 
Perl5 поддерживается и будет дальше поддерживаться. Кинули всех авторы python3, не путай.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 00:15 
> и будет дальше поддерживаться

Ты свои влажные мечты всем не рассказывай. Пока на нем есть что-то важное, то будет как-то поддерживаться. Но важного то почти и не осталось.

> Кинули всех авторы python3, не путай.

C python как раз все ок. А что на питон смотришь? Изменять любишь? Двойная ты личность, неприятный аноним.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 17:26 
> Но важного то почти и не осталось.

Это всего лишь твоё враньё, не более.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено user90 , 18-Апр-20 19:04 
Хоть бы постыдился свою тупизну выставлять на всеобщее обозрение))

"Perl6" к пятому имеет весьма отдаленное отношение.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 19:47 
Это питон 2 к питон 3 имеет далекое отношение. Просто ты недалекий.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:23 
Perl6 это другой язык, просто ты врёшь.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:05 
Твой мозг другой. Там различий меньше чем даже между python 3.0 и 3.8. Единственное что в третьем питон совместимость внутри 3-ей версии в целом сохранена.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 17:28 
> Там различий меньше чем даже между python 3.0 и 3.8

Опять враньё.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 00:16 
perl6 не существует. Есть рак и раки.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Вебмакака , 18-Апр-20 19:48 
А вот если бы эти данные были структурированы, то писать адхок парсеры на мутных языках бы не пришлось. Но структуривать данные это миллениальское изобретение, в тру юникс вее думать об этом запрещено.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:26 
> Но структуривать данные это миллениальское изобретение, в тру юникс вее думать об этом запрещено.

Вызывающе неверная информация.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:38 
Структурировать, конечно же, надо в бинарном формате, желательно запатентованном.

Структурирование в виде строк и столбцов с разделителями - это же слишком просто, некуда засунуть очередной фреймворк на 100 мегабайт блоба.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Crazy Alex , 19-Апр-20 04:54 
Некуда засунуть метанюинформацию, зато вдоволь возможностей побороться с кавычками, странными симаолами, кодировками и так далее.

Текст - это, конечно, универсально, но уж больно рискованно. Почему и появились всякие ключики -0 у разных там xargs - но, честное слово, можно было бы и дальше развить, юниксвею было бы только на пользу, если бы парсинг был попроще и побезопаснее. А так часто ровно поэтоиу вместо комбинирования предпочитают сделать комбайн.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 18:55 
Давайте ещё Кобол ада лисп фортран и пр. ископаемый хлам возродите

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 19:18 
> Давайте ещё Кобол ада лисп фортран и пр. ископаемый хлам возродите

Ада это такой раст 80х и оно живо у военщины, лисп просто отличный метаязык (жаль тормозной), фортран быстрее си (от немного до много, по ряду причин) и для него есть миллионы математического кода. Кобол стоило бы сравнивать с прологом. Правда, разница в том, что кобол сегодня используется различными бизнесами, а пролог вряд ли. Где-нибудь используется пролог? Вот авк используется в различных билд скриптах, где нет смаке и месон.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 19:54 
Пролог в обучении использовался.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним84701 , 18-Апр-20 21:21 
> Правда, разница в том, что кобол сегодня используется различными бизнесами, а пролог вряд ли. Где-нибудь используется пролог? Вот авк используется в различных билд скриптах, где нет смаке и месон.

Кхе-кхе
https://gerrit-review.googlesource.com/Documentation/prolog-...

ну или
> “Most people probably have used SICStus Prolog without knowing it,” says Mats Carlsson, its lead developer. “One of our customers runs a flight booking system on SICStus which handles nearly a third of all airline tickets in the world.”

или
https://sicstus.sics.se/customers.html
> Speech applications: NASA
> Clarissa, a fully voice-operated procedure browser has been developed by the NASA Intelligent Systems Division.

(причем, "место действия" - ISS)


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 20:27 
Зачем возрождать то что используется каждый день? Оно и так используется.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:05 
Ну как бы зачем ворошить если работает.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 21:29 
IBM бесплатно обучает Коболу - не хватает специалистов. https://www.inputmag.com/tech/ibm-will-offer-free-cobol-trai...

Фортран до сих пор основной язык программирования в, например, астрофизическом моделировании.

Ada широко используется в оборонке США, в системах организации воздушного движения, в банковских системах, в медицинских устройствах.

Ну а Лисп, в различных его диалектах, вообще так широко используется, что перечислением можно заниматься сутки. Его увидеть можно где угодно, если кругозор пошире шлепания форм на Реакте и написания CRUD-ов на PHP.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 18-Апр-20 22:22 
>Давайте ещё Кобол ада лисп фортран и пр. ископаемый хлам возродите

Ada ископаемый? На нём Пентагон и НАТО кодят.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 20-Апр-20 14:41 
>Ada ископаемый? На нём Пентагон и НАТО кодят.

Ага а еще в Пентагоне НАТО до сих пор есть компы 70-80ых годов прошлого века с 3,5'' дискетами - ну есс-но не случайно они на Аде кодят, он ведь под то железо еще создавался
Совпадение - не думаю


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 21-Апр-20 17:28 
>>Ada ископаемый? На нём Пентагон и НАТО кодят.
> Ага а еще в Пентагоне НАТО до сих пор есть компы 70-80ых
> годов прошлого века с 3,5'' дискетами - ну есс-но не случайно
> они на Аде кодят, он ведь под то железо еще создавался
> Совпадение - не думаю

Список "заточенностей" языка Ада "под то железо" в студию, пожалуйста.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено твой лучший друг , 18-Апр-20 23:27 
Обожаю авк. Правда, использовал сильнее, чем "давай суммируем вот этот столбец в выводе такой-то утилиты" толкьо один раз - решал задачку парсинга html отчётов, в домашних условиях. Сходу сделал на баше + всё-таки немного седа + башевское редактирование строк. Сказать, что было медленно, это ничего не сказать.
Далее ушел на чистый баш, с минимумом вызовов сторонних утилит, но дешевле не вышло. Удивили возможности анализа строк, но выглядело коряво.
Везде реализовывал парсер стейт-машиной.
И потом как водится, как пишется,  буквально за вечер - два, сев читать учебник по авк,  сделал почти без регулярок на базе FS RS переменных бомбовский парсер - автомат.
Сказать, что он летает, это преуменьшить. Слишком смело было бы говорить, что язык заточен под парсеры с автоматом состояний, но код получился красивый, без костылей, сходу читаемый и понятный даже без учебника.  Задаешь сепаратор записей, далее сепаратор полей, это в точности то, что нужно было. Генерил сиквел,без единого запуска стороних утилит, всё одним процессом. Открыл файлик, пробежался, закрыл. Просто бомбовски было. Был в восторге. Потом ещё немного почитал учебник, и единственно что добавил - вывел часть кода в функции, да и потом забил на улучшательство, даже не дочитал учебник честно говоря. но производительность порадовала.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 19-Апр-20 03:20 
Хех. Я как-то давно на awk делал синхронизацию структур таблиц в mysql. На входе два --no-data дампа, на выходе alter table-ы. И, нет, information schema тогда не было, надо было парсить show create table.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 00:48 
Еще чуть-чуть в порядке саморекламы. Любителям консольных полезняшек или если вдруг понадобиться искать по регуляркам чуть более сложным образом.

https://github.com/cheusov/jrep

Не awk, конечно, но оно умеет хитро форматировать вывод. Для однострочников мегаполезно.


"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено ffirefox , 19-Апр-20 06:45 
На Java как-то тяжеловато для однострочников...
А почему не модуль для runawk?

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено vle , 19-Апр-20 11:14 
По условию задачи на тот момент мне требовались регулярки именно от Java и быстро-быстро ими с консоли что-то искать. Если бы нашел Java Regexp на С, я бы просто слинковал BSD-ный grep c соответствующей либой. Но поскольку либо такую не нашел, пришлось писать grep на Java с нуля. Не на awk потому что POSIX regexps были не нужны.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено anonymous , 19-Апр-20 20:34 
Чтоб весь софт так обновлялся. А то обычно накрутят ненужных фич и насыпят новых багов вместо того, чтобы старые исправлять.

"Новая версия интерпретатора GNU Awk 5.1 "
Отправлено Аноним , 22-Апр-20 14:06 
awk это няшка