The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Новая версия интерпретатора GNU Awk 5.1 , opennews (??), 18-Апр-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


2. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от Аноним (2), 18-Апр-20, 11:14 
Часто используете?
Ответить | Правка | Наверх | Cообщить модератору

3. "Новая версия интерпретатора GNU Awk 5.1 "  +15 +/
Сообщение от Аноним (3), 18-Апр-20, 11:23 
да
Ответить | Правка | Наверх | Cообщить модератору
Часть нити удалена модератором

34. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Michael Shigorinemail (ok), 18-Апр-20, 14:48 
Предъявите.
Ответить | Правка | К родителю #32 | Наверх | Cообщить модератору

9. "Новая версия интерпретатора GNU Awk 5.1 "  +2 +/
Сообщение от Аноним (9), 18-Апр-20, 13:26 
А какие варианты? Ну не sed же, в самом деле)) Конечно, можно бы и Perl, но зачем, если есть специализированный инструмент.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

23. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (13), 18-Апр-20, 14:12 
>>баш имеет встроенные регулярки, можно избежать лишних внешних вызовов
> но dash побыстрее будет в несколько раз

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

Ответить | Правка | Наверх | Cообщить модератору

25. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от VINRARUS (ok), 18-Апр-20, 14:17 
>В баше всё же намного больше фич

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

Ответить | Правка | Наверх | Cообщить модератору

39. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (13), 18-Апр-20, 14:56 
>>В баше всё же намного больше фич
> Можна пример?

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

Ответить | Правка | Наверх | Cообщить модератору

43. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от VINRARUS (ok), 18-Апр-20, 15:17 
Да както ничего прорывного кроме большего функционала read не увидел.
Ответить | Правка | Наверх | Cообщить модератору

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

102. "Новая версия интерпретатора GNU Awk 5.1 "  –4 +/
Сообщение от VINRARUS (ok), 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 совместимым интерпритатором шел кода?

Ответить | Правка | Наверх | Cообщить модератору

103. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (13), 18-Апр-20, 22:09 
Хз при чём тут баш. Man shift может.
Ответить | Правка | Наверх | Cообщить модератору

85. "Новая версия интерпретатора GNU Awk 5.1 "  +2 +/
Сообщение от Аноним (85), 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...

Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

28. "Новая версия интерпретатора GNU Awk 5.1 "  +1 +/
Сообщение от Аноним (27), 18-Апр-20, 14:25 
>но dash побыстрее будет в несколько раз

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

Ответить | Правка | К родителю #20 | Наверх | Cообщить модератору

29. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от VINRARUS (ok), 18-Апр-20, 14:31 
>Но bash в дистрах изкоробки.

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

Ответить | Правка | Наверх | Cообщить модератору

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

35. "Новая версия интерпретатора GNU Awk 5.1 "  –2 +/
Сообщение от Michael Shigorinemail (ok), 18-Апр-20, 14:49 
dash глючен, увы.  Рассказывал уж и пример случая, который сам поймал, приводил.  Апстрим в курсе, забил (можете объяснить тем, что все ушли тащить в дебиан systemd, мне без разницы).
Ответить | Правка | К родителю #20 | Наверх | Cообщить модератору

38. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от myhand (ok), 18-Апр-20, 14:54 
> Рассказывал уж и пример случая

Например.

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

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

Ответить | Правка | Наверх | Cообщить модератору

77. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от Michael Shigorinemail (ok), 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 не должно быть
> но оказывается, что все шеллы это понимают
> хотя в грамматике шелла это недопустимо

Ответить | Правка | Наверх | Cообщить модератору

128. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от myhand (ok), 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 - нету.

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

56. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (13), 18-Апр-20, 17:17 
>с не zero-terminated строками

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

Ответить | Правка | Наверх | Cообщить модератору

79. "Новая версия интерпретатора GNU Awk 5.1 "  –2 +/
Сообщение от Michael Shigorinemail (ok), 18-Апр-20, 19:22 
> Я бы хотел увидеть пример.

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

Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

22. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от user90 (?), 18-Апр-20, 14:11 
> Сед норм.

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

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

26. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от user90 (?), 18-Апр-20, 14:18 
Человеку тоже свойственно читать построчно :) Так что это как раз Ок?
Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

37. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от Аноним (13), 18-Апр-20, 14:51 
> Человеку тоже свойственно читать построчно :) Так что это как раз Ок?

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

Ответить | Правка | К родителю #26 | Наверх | Cообщить модератору

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

51. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от VINRARUS (ok), 18-Апр-20, 16:55 
Можна пример сложного текста для парсинга, шобы чесно было?
Ответить | Правка | Наверх | Cообщить модератору

58. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от bircoph (ok), 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

Ответить | Правка | Наверх | Cообщить модератору

69. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (69), 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
Ответить | Правка | Наверх | Cообщить модератору

99. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от VINRARUS (ok), 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

Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

142. "Новая версия интерпретатора GNU Awk 5.1 "  –1 +/
Сообщение от bircoph (ok), 20-Апр-20, 21:23 
1. Не так уж и сильно, если mawk использовать — он лёгкий.
2. На больших файлах это совершенно не важно.
Ответить | Правка | К родителю #141 | Наверх | Cообщить модератору

143. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от VINRARUS (ok), 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 конструкцыю — банально из за экономии времени на рожание ядром нового запущеного процеса.

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

54. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Аноним (69), 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]

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

81. "Новая версия интерпретатора GNU Awk 5.1 "  +/
Сообщение от Michael Shigorinemail (ok), 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...

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру