Реализации awk и функция length

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

осмелюсь дополнить drBatty
количество символов — это всегда вопрос интерпретации информации.
сколько символов записано в этой строке (если убрать разделяющие пробелы)?:
& # 6 0 ;

пять?
один?

верны оба ответа? или оба неверны?
или ответ зависят от выбора того, как интерпретировать информацию?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Реализации awk и функция length

Сообщение Nazyvaemykh »

На то и придуманы текстовые файлы: в них каждый символ интерпретируется единственным образом — именно как один символ, не два и не пять?
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

Nazyvaemykh писал(а):
04.05.2011 15:13
На то и придуманы текстовые файлы: в них каждый символ
Проблема в том, что в файлах, в принципе, нет символов. Есть байты, а интерпретировать байты в символы можно очень по разному.
Спасибо сказали:
Ginzburg
Сообщения: 37
ОС: Windows Vista

Re: Реализации awk и функция length

Сообщение Ginzburg »

env LANG=ru_RU.UTF-8 echo Вася Пупкин | od

не вижу ни одного байта
Я конечно далек от мысли... (с)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Реализации awk и функция length

Сообщение /dev/random »

Ginzburg писал(а):
04.05.2011 16:25
env LANG=ru_RU.UTF-8 echo Вася Пупкин | od

не вижу ни одного байта

В смысле?

$ env LANG=ru_RU.UTF-8 echo Вася Пупкин | od
0000000 111320 130320 100721 107721 150040 150637 150203 150277
0000020 150272 150270 005275
0000026

Эти числа - пары байтов. Чтобы получить одиночные, нужно указать od -t o1

Во-вторых, смысл указывать "env LANG=ru_RU.UTF-8" для echo? echo просто выводит свои параметры, как есть, не перекодируя. В какой кодировке вы их вводили (т.е. в какой работает терминал), в такой они и будут выведены.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

Ginzburg писал(а):
04.05.2011 16:25
env LANG=ru_RU.UTF-8 echo Вася Пупкин | od

не вижу ни одного байта
env LANG=ru_RU.UTF-8 echo Вася Пупкин | hd
А я только байты и вижу.
Спасибо сказали:
Ginzburg
Сообщения: 37
ОС: Windows Vista

Re: Реализации awk и функция length

Сообщение Ginzburg »

а почему Вы решили, что пара байтов ? а не два байта и четыре бита ?
или пять триад и один бит ?
Я конечно далек от мысли... (с)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Реализации awk и функция length

Сообщение /dev/random »

Ginzburg писал(а):
04.05.2011 16:35
а почему Вы решили, что пара байтов ? а не два байта и четыре бита ?
или пять триад и один бит ?

1) "Пять триад и один бит" - это и есть два байта.
2) Почему не "два байта и четыре бита" (т.е. не 20 бит)? Потому что в мане так сказано. По умолчанию используется размер sizeof(short), что в линуксе всегда два байта.
Спасибо сказали:
Ginzburg
Сообщения: 37
ОС: Windows Vista

Re: Реализации awk и функция length

Сообщение Ginzburg »

если чо байт может быть и 6 и 8 и 10 и даже 12 бит

"Потому что в мане так сказано" - критерий представления данных ?

а как тогда быть с этим - "mawk - pattern scanning and text processing language" ?
Я конечно далек от мысли... (с)
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

Ginzburg писал(а):
04.05.2011 16:35
а почему Вы решили, что пара байтов ? а не два байта и четыре бита ?
Посчитал. До 16 считать еще в 1-м классе учат :)

Ginzburg писал(а):
04.05.2011 16:44
"Потому что в мане так сказано" - критерий представления данных ?
Не критерий, а способ. Способ, используемый данной программой для представления данных, задокументированный в manual page.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Реализации awk и функция length

Сообщение /dev/random »

Ginzburg писал(а):
04.05.2011 16:44
если чо байт может быть и 6 и 8 и 10 и даже 12 бит

Я в курсе. Но и в моём, и в вашем случае это 8.

Ginzburg писал(а):
04.05.2011 16:44
"Потому что в мане так сказано" - критерий представления данных ?

Нет, описание работы программы.

Ginzburg писал(а):
04.05.2011 16:44
а как тогда быть с этим - "mawk - pattern scanning and text processing language" ?

Это к чему?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

Ginzburg писал(а):
04.05.2011 16:44
если чо байт может быть и 6 и 8 и 10 и даже 12 бит
ой, спасибо. вы нам всем просто глаза открыли.
а ещё информацию можно и тритами измерять. или бутылками. в общем, по вкусу.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Реализации awk и функция length

Сообщение drBatty »

watashiwa_darede... писал(а):
04.05.2011 16:23
Проблема в том, что в файлах, в принципе, нет символов. Есть байты, а интерпретировать байты в символы можно очень по разному.

проблема в том, что в текстовых файлов в принципе нет никаких байт. А есть только символы некоторого заданного алфавита. Вообще говоря, сколько в символе бит/байт - вопрос десятый в общем-то. Системные программы не нуждаются в выводе/вводе/обработке информации для человека. По тому, они могут сравнивать строки как набор байтов (равно/неравно. А вот больше/меньше тоже можно, но вы будете против. Также вы воспротивитесь определению "длинна строки". Но это - ваша проблема. УМВР)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

drBatty писал(а):
10.05.2011 20:59
в текстовых файлов в принципе нет никаких байт.
совершенно верно. как и в любом другом файле, там записана информация. которую можно измерять, например, байтами.

drBatty писал(а):
10.05.2011 20:59
А есть только символы некоторого заданного алфавита.
а вот это — лишь вопрос интерпретации той самой информации.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

drBatty писал(а):
10.05.2011 20:59
проблема в том, что в текстовых файлов в принципе нет никаких байт.
Текстовый файл — это такая древняя абстракция, которая поддерживает в общем-то всё, но глядя на текстовый файл непонятно, что — метаинформация отсутствует. Есть форматы более высокого уровня, базирующиеся на текстовых файлах (html, например), в которых есть метаинформация, указывающая кодировку (meta content-type, например). Без этой метаинформации текстовый файл — не текстовый файл, а набор байтов, ибо в символы их можно превращать в совершенно разные долго и со вкусом.

drBatty писал(а):
10.05.2011 20:59
Системные программы не нуждаются в выводе/вводе/обработке информации для человека.
Вообще говоря, нуждаются. Но это уже тема для совсем другого разговора.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Реализации awk и функция length

Сообщение drBatty »

watashiwa_darede... писал(а):
10.05.2011 22:13
Текстовый файл — это такая древняя абстракция, которая поддерживает в общем-то всё, но глядя на текстовый файл непонятно, что — метаинформация отсутствует.

может и присутствует, но вы её не видите :)
watashiwa_darede... писал(а):
10.05.2011 22:13
а набор байтов, ибо в символы их можно превращать в совершенно разные долго и со вкусом.

вы смотрите на это с т.з. оператора. с т.з. системы никакой неоднозначности нет - она прекрасно знает, как именно интерпретировать эти символы. Некоторые программы (например gawk) умеют интерпретировать тексты по разному, например как ASCII или UTF-8. Это фича, а не баг. Например, японское слово 尻 имеет длину 1 символ в UTF-8, или 3 символа, если вы его неправильно интерпретируйте (как ASCII текст). И что тут плохого? По-русски тут будет 4 символа, ну и что? И занимать они будет 8 или 4 байта. Gawk интерпретирует символы любым указанным вами способом, и я не очень понимаю, что в этом плохого? Некоторые способы не поддерживаются другими утилитами, ну и что?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

drBatty писал(а):
11.05.2011 10:36
Gawk интерпретирует символы любым указанным вами способом, и я не очень понимаю, что в этом плохого?
Абсолютно ничего. Я как раз и говорю о том, что это хорошо. :)

drBatty писал(а):
11.05.2011 10:36
с т.з. системы никакой неоднозначности нет
У системы нет т.з. Не доросла еще. Любая т.з. — это т.з. оператора.

drBatty писал(а):
11.05.2011 10:36
она прекрасно знает, как именно интерпретировать эти символы
Это оператор знает. Хорошо, если всегда :)

drBatty писал(а):
11.05.2011 10:36
И что тут плохого? По-русски тут будет 4 символа, ну и что?
Зависит от того, что требуется сделать с текстом. С текстом, а не с произвольной байтовой цепочкой. Если текст, например, надо сравнивать без учета регистра, то очень даже «что». А превращение цепочки байтов в текст как раз и зависит от интерпретации, которая в файлах plain text как раз таки и не задана однозначно. При желании вообще любой, даже бинарный, файл можно интерпретировать как plain text. В некоторых случаях. Никто ведь не запрещает использовать control characters и не ограничивает длину строки.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Реализации awk и функция length

Сообщение Nazyvaemykh »

Вы все не правы.
Пользователь, работающий с awk, может ничего не знать ни про какие байты, триты или бутылки, тем более не хочет он знать про кодировки. Он работает с текстом, который измеряется буквами, словами, предложениями.

Если программка выводит, что в слове «комар» 10 букв — то это жуткая, немыслимая ошибка.

Да, где-то глубоко в недрах системы такие программы может быть и нужны. Например, драйвер файловой системы может считать, что длины названия файла «комар» 10 байтов, это его дело.
Но для программы, прямо взаимодействующие с пользователем, такое просто недопустимо.
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

Nazyvaemykh писал(а):
12.05.2011 16:47
Если программка выводит, что в слове «комар» 10 букв — то это жуткая, немыслимая ошибка.
не пользуйтесь этой жуткой немыслимой программкой.
gnu awk, gnu bash и gnu wc — хороший выбор программ для подсчёта количества букв в слове "комар'.
$ awk 'BEGIN {print length("комар")}'
5
$ a=комар echo ${#a}
5
$ echo -n комар | wc -m
5
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Реализации awk и функция length

Сообщение Nazyvaemykh »

Почему-то разработчики Debian GNU/Linux предложили мне другой awk, не задав даже никаких вопросов, типа: "Вы действительно хотите, чтобы вместо gawk была установена ущербная mawk?"
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

Nazyvaemykh писал(а):
12.05.2011 19:55
Почему-то разработчики Debian GNU/Linux предложили мне другой awk, не задав даже никаких вопросов, типа: "Вы действительно хотите, чтобы вместо gawk была установена ущербная mawk?"
видимо, у вас в системе не стоит ни одного пакета, зависящего от gawk:
$ apt-cache rdepends gawk

поставьте gawk, приоритет в alternatives у него выше, чем у mawk. будет вам счастье.

p.s. казалось бы, и при чём тут разработчики debian gnu/linux?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Реализации awk и функция length

Сообщение Nazyvaemykh »

Ну, если бы не Debian, я бы, может быть, и не узнал бы, что на свете есть mawk. awk является необходимой частью любой unix-подобной системы, стандарт posix. Безотносительно любых зависимостей в системе awk должен быть.

Я очень удивлен, что дебиановцы выбрали столь неудачную реализацию awk в качестве умолчательной. И даже не предупреждают об этом во всякого рода руководствах по установке.

¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

Nazyvaemykh писал(а):
12.05.2011 23:24
Я очень удивлен, что дебиановцы выбрали столь неудачную реализацию awk в качестве умолчательной. И даже не предупреждают об этом во всякого рода руководствах по установке.
awk предоставляют три пакета: gawk, mawk, original-awk.
при установке минимальной системы пакет awk устанавливается как predepends пакета base-files.
какой из трёх будет выбран, зависит, видимо, от выбранного алгоритма резолвинга.
какая из реализаций работает в момент установки, не знаю.
но если опробовать, например, пару наиболее популярных алгоритмов (из apt-get и aptitude), то уже видно, что результат их выбора — разный:
$ sudo dpkg -r --ignore-depends=gawk gawk
$ sudo dpkg -r --ignore-depends=mawk mawk
после этого:
1 вариант:
$ sudo apt-get install -f -y — установит gawk
2 вариант:
$ sudo aptitude install -y — установит и gawk и mawk
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Реализации awk и функция length

Сообщение drBatty »

watashiwa_darede... писал(а):
11.05.2011 10:51
С текстом, а не с произвольной байтовой цепочкой. Если текст, например, надо сравнивать без учета регистра, то очень даже «что».

я не очень понимаю, зачем системе сравнивать без учёта регистра? Если это не Windows, конечно.
Nazyvaemykh писал(а):
12.05.2011 16:47
Если программка выводит, что в слове «комар» 10 букв — то это жуткая, немыслимая ошибка.

юзерская? да, ошибка. Системная? Нет. Для неё это действительно 10 букв. Именно так система сравнивает и выделяет место скажем под имена файлов. Там 1...255 символов. 25 с половиной комаров. Такие дела...
Nazyvaemykh писал(а):
12.05.2011 16:47
Но для программы, прямо взаимодействующие с пользователем, такое просто недопустимо.

Ну есть у этого пользователя окружение, там написано в частности, как считать буквы. В слове "комар" 5 букв.
sash-kan писал(а):
13.05.2011 09:59
awk предоставляют три пакета: gawk, mawk, original-awk.
при установке минимальной системы пакет awk устанавливается как predepends пакета base-files.
какой из трёх будет выбран, зависит, видимо, от выбранного алгоритма резолвинга.
какая из реализаций работает в момент установки, не знаю.

насколько я понял - последняя. Впрочем, разницы наверное нет, потому-что скорее всего там POSIXLY_CORRECT
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Реализации awk и функция length

Сообщение watashiwa_daredeska »

drBatty писал(а):
13.05.2011 20:38
зачем системе сравнивать без учёта регистра? Если это не Windows, конечно.
Шутку понял. Смешно.

drBatty писал(а):
13.05.2011 20:38
потому-что скорее всего там POSIXLY_CORRECT
8-[ ] Зачем?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Реализации awk и функция length

Сообщение sash-kan »

drBatty писал(а):
13.05.2011 20:38
sash-kan писал(а):
13.05.2011 09:59
awk предоставляют три пакета: gawk, mawk, original-awk.
при установке минимальной системы пакет awk устанавливается как predepends пакета base-files.
какой из трёх будет выбран, зависит, видимо, от выбранного алгоритма резолвинга.
какая из реализаций работает в момент установки, не знаю.

насколько я понял - последняя.
последняя по какому критерию? (и из какого списка? я знаю лишь два резолвера: из apt-get-а и aptitude-а). вообще при установке базовой системы awk резолвится (кем-то) именно в mawk.

QUOTE писал(а):Впрочем, разницы наверное нет, потому-что скорее всего там POSIXLY_CORRECT
«там» — это где?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: