Представлен новый выпуск реализации языка программирования AWK от проекта GNU - Gawk 5.2.0. AWK был разработан в 70-х годах прошлого века и не претерпел значительных изменений с середины 80-х годов, в которых был определен основной костяк языка, что позволило на протяжении последних десятилетий сохранить первозданную стабильность и простоту языка. Несмотря на преклонный возраст, AWK до сих пор активно используется администраторами для выполнения рутинных работ, связанных с разбором различного рода текстовых файлов и генерацией несложной результирующей статистики...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=57732
Секретная команда, о которой все думают, что это хитрый print, а это целый ЯП :)
Я так не думаю, мне по работе часто приходится его юзать чтоб просуммировать столбы в CSV файле, или написать аналог sql'ного group by. Очень офигенный ЯП.
Эта штука удобней
https://www.gnu.org/software/datamash/examples/
> о которой все думаютНе думают , строчку легко можно в седушке править, правда этот путь пришлось пройти от оука к сожалению. Бесполезная тулза впринципе, просто дело привычки и главное молодняку ее не навязывайте.
В sed можно вывести текст начиная с одного регекса и до другого? Сразу все такие случаи? Если честно что sed, что awk — достаточно сложные тулзы для понимания принципов работы с ними. sed только ради s// режима и использую
В баше не претерпевшем изменений с начала 90-х использовать авк из 80-х, замечательно, все продвинутые уже давно положили х на это старье и юзают питон/луа/павершелл
AWK максимально удобен, когда тебе надо быстренько отфильтровать значения в выводе одной тулзы и передать в другую
максимально удобен: быстренько лезем в гугл и стековерфлоу осваивать инструментарий из 80-ых
Я так понимаю луа/powershell интуитивно понятен и можно сразу писать скрипны нечего не зная про язык?
интуитивно понятна только сися. А у остальных инструментов ключевой является распространенность. И уж извини, но пихтон знают куда больше людей. Более того, на разбор строки в пихтоне не приходится запускать аж целый новый процесс /usr/bin/awk - вся работа внутри одного процесса, так что технически даже пихтон (ключевое слово - "даже") лучше баш-портянок на awk.
А распространенность оценивается по звездочкам на гитхабе.
Ну так пиши на питоне дальше раз не нравится awk. Смысл токсить?
Какой смысл писать скрипты на питоне для людей, которые скорее всего даже строки толком парсить не умеют?
питон ты специально пропустил?) потому что к нему это применимо
Чисто для разнообразия попробуй пописать питоновский код интерактивно в консоли. Не одну команду а вот прям всё с этими идиотскими отступами. Я на тебя посмотрю, а если тебе даже и понравится то так тебе и надо.
Однострочник детектед
>Чисто для разнообразия попробуй пописать питоновский код интерактивно в консоли.Я из-за этого уже третий год плачу по лиспу, но работаю пыхтонистом.
И ещё сильнее плачу кровавыми слезами, когда питонисты что-то там заливают про pep8 (который ломает шелл) или tdd (сразу видно, что они шеллом не пользуются и зачем-то лабают код на скриптовом языке сверху вниз).
А что делать тем кто не знает питон или у кого на системе не установлен питон?
Съезжай с винды. Питон сейчас наверное даже в холодильнике есть (надеюсь что нет, но всё же)
Покажи мне хоть один интуитивно понятный язык на котором можно сходу начать писать не изучая и не гугля
Паскаль :D
Чтобы эффективно работать - надо учиться. Прикинь, да?
Думаешь, запустил "хелловорлд под 17 платформ одним скриптом" - и уже чему-то научился?
Ты смотри-ка, меня читают ))Естественно научился!
После хелловорлда запустил... ’awk 'END{print NR}'’ (в тему, да), ща...
сишный проект в 9095 строк и оно работает. Везде.Сижу вот сейчас под арм фикшу, автотесты регрессию нашли.
> сишный проект в 9095 строкНичосе! Это такой хеллоуволд продвинутый что столько кода?
> под арм фикшу
так "оно работает. Везде." или таки приходится подпиливать под платформы?))
«Кроссплатформенность» сишечки она такая.
Вы специально троллите или думаете, что абсолютно весь когда-либо написанный код должен за вас взять и заработать? Спасибо, в том же питухоне проблему многопоточности решили не решать и просто запретили исполнять один и тот же _КУСОК_КОДА_ (КАРЛ) в разных потоках. А shared memory приходится переводить в сишные типы данных. ММммм
Нисколько не троллю. Просто человек пишет (в контексте 17 платформ) что его код работает везде, а следующей строкой что на арме полезла регрессия. Такое вот забавное двоемыслие.
И причем тут питон с мультитредингом?
Незачем там лезть ни в гугл, ни на стековерфлоу. Авк настолько минималистичен, что достаточно потратить полчаса на курение ман-страницы, чтобы начать на нём писать.
> быстренько
> потратить полчаса на курение ман-страницыКогда в следующий раз понадобится — повторить.
Для гнутых лучше через info, которые обычно более подробны.
Да, именно, "быстренько". AWK прост, и поэтому его можно не учить. Поэтому "быстренько" лезем и "быстренько" делаем.
Главное - скоростной. Хотя читал, что perl ещё быстрее (хотя потребление памяти больше).
Сразу видно мелкобукву, ведь мелкобуква так и не научилась читать маны.
> Сразу видно мелкобукву, ведь мелкобуква так и не научилась читать маны.Больше манов прочитаешь - меньше маны потеряешь.
...довольный Вася набил язвительный ответ на неизменной с середины XIX века доске-с-буквами, а затем навел курсор изобретённого в 50х манипулятора и нажал на виртуальное изображение не менявшейся с XVI века кнопки. Васин ответ был разбит на пакеты протоколом 70х годов и передан по сети по принципам 80х. Сервер, не претерпевший принципиальных переработок с 90х, как обычно, послушно и предсказуемо собрал пакетики протокола 70х воедино, а затем на высветил его на страничке, оформленной языком 90х. "Как хорошо, что есть такой новый стафф, как луа и повершелл", думал Вася, закрывая неизменное по сути и по реализации с 70х окно такой же древней абстракцией еще более древнего предмета реального мира - виртуальной кнопкой "закрыть"...
Тебе как обычно шашечки, а не ехать. Какая разница в каком году что было изобретено?
просто его папа в нулевых сделал и у него развился комплекс неполноценности всего что старше него.
Мне нравится иногда тыкать "новоделов" в то, что их свеженький компьютер работает в том числе и на технологиях конца девятнадцатого века и тому подобное... Говорят, им это очень нравится и они начинают гореть. Ну почему бы не помочь другу, а?
> в том числе и на технологиях конца девятнадцатого векаВ «том числе» он и на технологиях пятитысячелетней давности работает (стекло в дисплеях, например). Но вот именно свеженький компьютер без технологий 21 века немыслим.
lua то тут каким боком - крошечный встраиваемый язык, из коробки там почти ничего нет
Прикинь - в луа мощная и эффективная работа со строками и регулярными выражениями, даже проще чем в авке, ты незнал?
У него память текёт. Хз, может это разрабы awesome набедокурили, но когда wm вырастает с 30k до 500M под утро, становится страшновато
А Tesla — неизменный по сути автомобиль столетней давности.
> А Tesla — неизменный по сути автомобиль столетней давности.Да ещё и колёсный, что вообще неприличная древность.
И много юзающих Паршел в GNU/Linux?
Так и есть. Только все эти артефакты из 70-х.
powershell? продвинутые? Тут явно лишнее "про". В обоих смыслах.
> юзают питон/луаpython: 1991 год
lua: 1993 год
Год начала разработки, последний выпуск луа 5.4 - 2020 год, питон 3.10.6 - 2022
>Год начала разработки, последний выпуск луа 5.4 - 2020 год, питон 3.10.6 - 2022GNU Awk 5.2 - 2022
> все продвинутые уже давно положили х на это старьеСудя по минусам, Х ВСЕ положили на тебя :)
Продвинутые не ставят в систему лишние интерпретаторы, дабы соблюдать правило Оккамы. Ну плоди лишних сущностей. Питоняшку знает Васька-дрочер с соседнего подъезда. И может нагадить на твоей системе, просто ради прикола, скачав скриптик, чтобы почувствовать себя хацкером. А чтобы познать AWK и создать на нём скрипт взламывающий систему, или меняющий привилегии нужно ЗНАНИЕ из 80-х :-) А значит увеличивается защищённость системы.Помимого того что оно уже есть по умолчанию, а питончки, луи и срань страшная(виндузовая) надо ещё ставить. Выделять память и т.д и т.п.
И никаких ошибок работы с памятью!
Ну щито поделать. Писали представители высшей цивилизации же, вымершей в 90х-00х. А на смену им родили жиробасов, не могущих даже указатель правильно взять, не говоря уже про кучу и сложнее.
Да, мы вымираем. Пичалька.
> Прекращена поддержка операционных систем OS/2 и VAX/VMS.Не смогли найти рабочих виртуалок?
Если не затруднит, накидай пожалуйста скриптец как их сделать. Хотя бы OS2 на KVM. Никак не могу разобраться с сетью, и желательно бы какой-нибудь SSH прикрутить и файл-трансфер.
Зачем тебе квм? Полуось даже в эмуляции будет бегать раз в 200 быстрее ваших последних линуксов.И какие проблемы с сетью? куэму из коробки предоставляет нат, а так же проброс портов с хоста на гостя в 5 слов. полно факов в интернете.
>>Никак не могу разобраться с сетьюМнээ... В свойствах виртуалке втыкнуть e1000e или (не к ночи будь помянут) rtl8139?
> Не смогли найти рабочих виртуалок?не смогли найти рабочих мейнтейнеров.
кстати поддержку для dos тож дропнули
> Similarly, support for DJGPP has been removed. It also was not
being actively maintained.
если вам невмоготэ без свежего гавка на ваших варпах и ваших досах с вээмэсами, можете отметиться в тамошней рассылке и поспосомбстовать.
> AWK до сих пор активно используется администраторами для выполнения рутинных работ,
> связанных с разбором различного рода текстовых файловНа опеннет, вроде, примерно то же самое и про перл говорили
C, bash, awk, sed, grep - это Юниксовая классика. А Perl, ну так исторически сложилось, что он гармонично слился с миром Юникс-подобных систем. Из новых языков Python хорошо гармонирует с GNU/Linux.Короче, про эти инструменты всегда так будут говорить.
Вот буквально пару дней назад делал скрипт для скачивания зависимостей из многомодульного ява-проекта с gradle сборкой. AWK просто вещь. У него настолько простая структура программы (считай список регэкспов с привязанными действиями, если матч), что забыть невозможно.Да вот кусочек этого скрипта:
#!/bin/bash
# Список искомых пакетов зависимостей
PACKAGES=$(cat <<EOF
com.vk.api:sdk
io.minio:minio
com.zaxxer:HikariCP
EOF)# Набор задач gradle которые выполнятся для поиска в их выводе зависимостей
TASKS="buildEnvironment dependencies "
TASKS+=$(./gradlew --console plain -q projects | gawk 'tolower($0) ~ /project \x27:/{gsub("[^A-Za-z]", "", $3);print $3":dependencies"}' | sort -u)deps=()
for task in $TASKS; do
echo "Checking $task"
log=$(./gradlew --console plain -q $task)for package in $PACKAGES; do
dep=$(echo $log | gawk -v dep="$package" 'match($0, dep":([0-9.]+)", groups) {print groups[0]; exit(1);}')if [ $? -eq 1 ]; then
echo found $dep
deps+=("$dep")
fi
done
done# Оставляем только уникальные зависимости
deps=($(for dep in "${deps[@]}"; do echo $dep; done | sort -u))
echo "All deps: ${deps[@]}"дальше wget'ом по deps, но это не имеет отношения к делу)
Нет бы простыню на питоне или расте нагородить? С билд-системой, зависимостями и обязательным обновлением всего и вся через интернет, который (скрипт, не интернет, тьфу-тьфу-тьфу) через полтора года перестанет работать...Ты прям как динозавр какой-то. Стыдно, товарищъ! Надо идти в ногу со временем!
А теперь попробуй это отдебажить, сказочник.Кстати, всё это старьё ещё и очень медленное. Медленнее даже Python.
Лучше на JS с NPM'ами.
Наш человек ) Ну, почти. Я б ещё точки с запятой расставил для предотвращения UB и си-стайла ))
Зачем вообще нужны sed и awk, если уже есть перл и баш? Они тоже в умолчальной поставке идут.
Можно без perl. А bash без внешних утилит плохо обрабатывает тексты (как раз через sed/grep/awk он их и обрабатывает). Можно попробовать обойтись cut,column и прочим из coreutils, но это будет очень сложно.По месту надо решать, как-то раз хотел сделать на bash синхронизацию двух разных БД (MySQL и Firebird, через cli-утилитки работы с базами) и в итоге ВНЕЗАПНО сделал скрипт на PHP. Поскольку скрипт был нужен для сайтов, сайты были на php и драйверы для СУБД были установлены. Так получилось меньше зависимостей (т.к. php и драйверы СУБД всё равно устанавливались для работы сайтов, а скрипт запускался на том же сервере по крону).
>sedsed -i 's/очепятка/правка/' ./ochepyatk*
>awkдано: логи
найти: время отрабатывания запроса, зная время отправки и время получения ответа.
> найти: время отрабатывания запроса, зная время отправки и время получения ответа.тут одним awk не справиться. тут bc нужон.
bc - это консольный калькулятор. Вы о чём?
если есть txtime и rxtime, для получения времени в пути хватит обычного калькулятора. да даже баша. авк-то зачем?
> дано: логи
> найти: время отрабатывания запроса, зная время отправки и время получения ответа.вот это я буду считать перлом, и плевать что медленнее.
вручную переводить даты-времена в форматах RFC 6666 в unix time и обратно, рискуя напрограммировать ошибок при переходе границ часа-суток-месяца - да ну нафиг.
лол будто c localtime() у тебя меньше возможностей налажать, чем c mktime()
> лол будто c localtime() у тебя меньше возможностей налажать, чем c mktime()
facepalm.jpg
а если так:
https://metacpan.org/pod/Date::Calc($Dd,$Dh,$Dm,$Ds) = Delta_DHMS($year1,$month1,$day1, $hour1,$min1,$sec1,
$year2,$month2,$day2, $hour2,$min2,$sec2);
ёёёёёётоварищ, ты реально не вкупаешь, почему я сфейспалмил?
что с авковым mktime, что с перловым localtime, что с твоими нагугленными модулями из сипана - ты должен дать им на вход одни и те же данные, определяющие декретное/фуетное время в твоей местности, а получить в ответ unix time.
я не знаю, как тут можно не увидеть мой пойнт - вероятность налажаться с параметрами у тебя совершенно одинаковая что в авке, что в перле. в случае с date::calc даже выше, т.к. там я не вижу например в параметрах dst.
зы я старый дурак птушо спутал localtime и timelocal. все остальное still stands
awk нужен ленивым админам, которым лень запоминать все ети ключики для cut, когда есть замечательный awk "{print $2,$4}"
Всё проверяется временем. В Линухе есть поделка никому не нужна, она не выживает. Если есть пользователи, значит оно кому-то нужно. Баш в обработке текста, ещё то ГОМНО. Перл вообще птичий язык. AWK просто прекрасен :-) Особенно когда тебе нужно из вывода ps выдернуть 2 и 4 столбец. А лезть и искать флаги, в лом. делаешь просто. ps aux|awk "print {$2, $4)" и занимаешься своими делами. А не шастаешь по манам ps :-)
Гм... Если у AWK "преклонный возраст", то ASM что - умер вообще?
Не, он в мавзолее и каждый прогер должен хотя бы раз на него глянуть. С уверенностью знать, что ASM был, есть и будет. Хоть раз должен попробовать написать хоть что-нибудь на ASM, т.е. программировать, программировать и еще раз программировать. А дальше уже, как любой образованный, может вставлять в свой код инлайн-цитаты из ASM. Понять путь компиляции и борьбу с ООП-классовым мышлением, историю типа узер взял в руки шыло и сделал дырку в картонке и сразу начал программировать. Ну и конечно объяснять всё это разным невеждам на сайтах.
Учение х86-ассемблера вечно, потому что правильно!
Учить сейчас х86 - разве что бы отбить навсегда желание сеансом некрофилии с DOSBox. Тогда уж смотреть какой эмулятор PDP-11, там хоть опкоды красивы. На реальном железе проще и понятнее IA32 с плоской моделью памяти, а ещё лучше AMD64 под Linux (и *BSD годятся) - системные вызовы понятны как в той ДОСе, плюс современные удобные способы адресации.
Всегда приятно узнать, что тут тусит эксперт по асму, которому возразить очень хочется, но по существу нечего.
В 2022-м учить CISC-ассемблеры?
Я и пишу про то, что на 16-ти битный точно не стоит тратить время (разве что есть знакомый учитель и книжки Финогенова). Если же это такая ненавязчивая реклама RISC-V, то его для этого надо сначала купить, а AMD64 как бы у всех итак есть.
> же это такая ненавязчивая реклама RISC-V, то его для этого надо
> сначала купить, а AMD64 как бы у всех итак есть.можно купить qemu и гойдаться :)
Не понял, что такое гойдаться, и подозреваю, что поисковик лучше не спрашивать. :) QEMU это примерно как Эльбрус по ssh или нюхать розы в противогазе, а AMD64 это flat assembler написанный на самом себе и с исходниками.
> Не понял, что такое гойдаться, и подозреваю, что поисковик лучше не спрашивать.- дети Ивановых, такие байстрюки, это невозможно! тетя Роза повесила лифчик сушиться, они сделали из него гамак и гойдаються!
> QEMU это примерно как Эльбрус по ssh или нюхать розы в противогазе
да нормуль, я под ним в позапрошлом году даже aix на спор запускал. это, конечно, было медленно и печально, но до uname я дождался. risc-v, думаю, ваще летать будет, быстрее, чем на реальном железе :)
Запустить, тем более на спор, это пол дела.
Надо же ещё что-то сассемблировать.
На AMD64 это как два байта переслать:
$ cat fasm_samples/console/00/a00.fasm
; fasm demonstration of writing 64-bit ELF executable
; note that linux from kernel 2.6.??? needs last segment to be writeable
; else segmentation fault is generated
; compiled with fasm 1.66; syscall numbers: /usr/src/linux/include/asm-x86_64/unistd.h
; kernel parameters:
; r9 ; 6th param
; r8 ; 5th param
; r10 ; 4th param
; rdx ; 3rd param
; rsi ; 2nd param
; rdi ; 1st param
; eax ; syscall_number
; syscall
;
; return register:
; rax ; 1st
; rdx ; 2nd
;
; preserved accross function call: RBX RBP ESP R12 R13 R14 R15
;
; function parameter (when linked with external libraries):
; r9 ; 6th param
; r8 ; 5th param
; rcx ; 4th param
; rdx ; 3rd param
; rsi ; 2nd param
; rdi ; 1st param
; call libraryformat ELF64 executable at 0000000100000000h ; put image over 32-bit limit
segment readable executable
entry $
mov edx,msg_size ; CPU zero extends 32-bit operation to 64-bit
; we can use less bytes than in case mov rdx,...
lea rsi,[msg]
mov edi,1 ; STDOUT
mov eax,1 ; sys_write
syscallxor edi,edi ; exit code 0
mov eax,60 ; sys_exit
syscallsegment readable writeable
msg db 'Hello 64-bit world!',0xA
msg_size = $-msg
$ fasm fasm_samples/console/00/a00.fasm
flat assembler version 1.73.12 (16384 kilobytes memory)
3 passes, 229 bytes.
$ ./fasm_samples/console/00/a00
Hello 64-bit world!
А для RISC-V где вот эти удобства?
Купить горстку микроконтроллеров CH32V307VCT6 (RCT6) не такая уж большая проблема. Да и, при желании, можно и чипок с MMU Allwinner D1 (D1s).
«Купить» - то есть сначала подождать с месяц, потом думать «и что со всем этим делать», потом искать примеры.. Вы лично кого-то научили кодить под это?
Согласен, на PDP-11 была самая простая и логичная система команд и, как следствие, красивый ассемблер! Одни и те же команды для работы с регистрами, памятью, стеком и портами внешних устройств... К тому же в любых комбинациях между ними! Это существенно упрощало отладку и эмуляцию при необходимости... Ностальгия!
Я не кодил под PDP-11, только на Z80 и немного на 6502, но когда надо было разобрать игрушку для БКшки, за пару часов свободно его освоил и прочитал дамп. x86 с его «640К хватит на всех» - это дрянь, внедрённая джедаями и рептилоидами, что бы убить ассемблер и внедрить Microsoft Pascal (поделом, что Borland их хоть с Паскалем переиграл), или как он там назывался. Специально повторю для тех ностальгирующих, кто ничего более в жизни не видел. :)
> код поддержки Cmake оказался не востребован и пять лет не обновлялсяЭто Ъ. Только autotools, только хардкор!
P.S. На самом деле правильно, для мелких систем с образом в десяток мегабайт (типа всяких роутеров) не будут специально собирать CMake-монстра.
> Прекращена поддержка операционных систем OS/2 и VAX/VMS.Уходит эпоха.
Какая эпоха, о чем вы?
OS/2 лежит на кладбище уже много лет как. Впрочем, как и VAX/VMS.
Согласен, их эпоха закончилась давно. И очень жаль, что полуось не прижилась - это была прекрасная ОС для того времени: масштабируемая, с реальной мультизадачностью и превосходной поддержкой внешних устройств, в отличие от ДОСа.
И конечно же вы оплакиваете проприетарные ОС?
Живую OS/2 видел, немного пользовался. А вот слово VAX/VMS, наверное, только в журнале Компьютер Пресс встречал.
кстати есть неплохое интервью с Брайан Керниган где есть упоминание про awk
https://www.youtube.com/watch?v=9tqMtgQIoj0
lolон даже доси его патчит, вон юникод запилил.
я в новости это кидал неделю назад, но новость оказалась недостаточно выдающаяся и модеры ее удалили.
ну а фуль, это вам не свежий тиобебебе или переписывание программы true на расте, хто там вообще про k из awk помнит.
а не, нифигаприношу свои извинения модераторам, это я где-то протупил, новость на месте.
"80-летний канадец на смог справиться с интерфейсом Github"
https://www.opennet.dev/openforum/vsluhforumID3/128270.html?n...
Понимаю этого канадца.
Не понимаю что нужно было принимать чтобы гит придумать и каким образом это стало настолько популярным.
Теорию графов нужно принимать для этого, тогда всё на место встаёт.
> я в новости это кидал неделю назад, но новость оказалась недостаточно выдающаяся и модеры ее удалили.Вы новость вместо формы отправки новостей скинули в форум, поэтому она и осталась незамеченной. Сам текст остался https://www.opennet.dev/openforum/vsluhforumID3/128270.html
Из списка топиков ссылка на него пропала, так как корневые сообщения в разделе обсуждения новостей скрываются, если через неделю в них так и появилось ни одного ответа (сейчас убрал подобное удаление, так как оно было сделано в стародавние времена, когда логика публикаций была другая).
Спасибо за разъяснение :)
>Отмечается, что реализация режима MPFR в GNU Awk рассматривается как ошибка.Поясните, это как? Поддержку функционала из пакета MPFR вообще не надо было делать?
Я так и понял.Кстати, существует реализация awk на Rust.
Прелесть awk например на винде, что нужен ровно один exe-шник для запуска скрипта.В отличие от любого перлопитона, который ставь да обновляй да не забудь библиотеки да версии да ещё что...
костяк языка.. это сильно