Реализации awk и функция length
Модераторы: /dev/random, Модераторы разделов
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
осмелюсь дополнить drBatty
количество символов — это всегда вопрос интерпретации информации.
сколько символов записано в этой строке (если убрать разделяющие пробелы)?:
& # 6 0 ;
пять?
один?
верны оба ответа? или оба неверны?
или ответ зависят от выбора того, как интерпретировать информацию?
количество символов — это всегда вопрос интерпретации информации.
сколько символов записано в этой строке (если убрать разделяющие пробелы)?:
& # 6 0 ;
пять?
один?
верны оба ответа? или оба неверны?
или ответ зависят от выбора того, как интерпретировать информацию?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 438
- Статус: Подопытный участник
Re: Реализации awk и функция length
На то и придуманы текстовые файлы: в них каждый символ интерпретируется единственным образом — именно как один символ, не два и не пять?
¡ Страсть к разрушению есть творческая страсть!
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Реализации awk и функция length
Проблема в том, что в файлах, в принципе, нет символов. Есть байты, а интерпретировать байты в символы можно очень по разному.
Мои розовые очки
-
- Сообщения: 37
- ОС: Windows Vista
Re: Реализации awk и функция length
env LANG=ru_RU.UTF-8 echo Вася Пупкин | od
не вижу ни одного байта
не вижу ни одного байта
Я конечно далек от мысли... (с)
-
- Администратор
- Сообщения: 5404
- ОС: Gentoo
Re: Реализации awk и функция length
В смысле?
$ 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 просто выводит свои параметры, как есть, не перекодируя. В какой кодировке вы их вводили (т.е. в какой работает терминал), в такой они и будут выведены.
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Реализации awk и функция length
env LANG=ru_RU.UTF-8 echo Вася Пупкин | hd
А я только байты и вижу.
Мои розовые очки
-
- Сообщения: 37
- ОС: Windows Vista
Re: Реализации awk и функция length
а почему Вы решили, что пара байтов ? а не два байта и четыре бита ?
или пять триад и один бит ?
или пять триад и один бит ?
Я конечно далек от мысли... (с)
-
- Администратор
- Сообщения: 5404
- ОС: Gentoo
Re: Реализации awk и функция length
1) "Пять триад и один бит" - это и есть два байта.
2) Почему не "два байта и четыре бита" (т.е. не 20 бит)? Потому что в мане так сказано. По умолчанию используется размер sizeof(short), что в линуксе всегда два байта.
-
- Сообщения: 37
- ОС: Windows Vista
Re: Реализации awk и функция length
если чо байт может быть и 6 и 8 и 10 и даже 12 бит
"Потому что в мане так сказано" - критерий представления данных ?
а как тогда быть с этим - "mawk - pattern scanning and text processing language" ?
"Потому что в мане так сказано" - критерий представления данных ?
а как тогда быть с этим - "mawk - pattern scanning and text processing language" ?
Я конечно далек от мысли... (с)
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Реализации awk и функция length
Посчитал. До 16 считать еще в 1-м классе учат :)
Не критерий, а способ. Способ, используемый данной программой для представления данных, задокументированный в manual page.
Мои розовые очки
-
- Администратор
- Сообщения: 5404
- ОС: Gentoo
Re: Реализации awk и функция length
Я в курсе. Но и в моём, и в вашем случае это 8.
Нет, описание работы программы.
Это к чему?
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
ой, спасибо. вы нам всем просто глаза открыли.
а ещё информацию можно и тритами измерять. или бутылками. в общем, по вкусу.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Реализации awk и функция length
watashiwa_darede... писал(а): ↑04.05.2011 16:23Проблема в том, что в файлах, в принципе, нет символов. Есть байты, а интерпретировать байты в символы можно очень по разному.
проблема в том, что в текстовых файлов в принципе нет никаких байт. А есть только символы некоторого заданного алфавита. Вообще говоря, сколько в символе бит/байт - вопрос десятый в общем-то. Системные программы не нуждаются в выводе/вводе/обработке информации для человека. По тому, они могут сравнивать строки как набор байтов (равно/неравно. А вот больше/меньше тоже можно, но вы будете против. Также вы воспротивитесь определению "длинна строки". Но это - ваша проблема. УМВР)
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
совершенно верно. как и в любом другом файле, там записана информация. которую можно измерять, например, байтами.
а вот это — лишь вопрос интерпретации той самой информации.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Реализации awk и функция length
Текстовый файл — это такая древняя абстракция, которая поддерживает в общем-то всё, но глядя на текстовый файл непонятно, что — метаинформация отсутствует. Есть форматы более высокого уровня, базирующиеся на текстовых файлах (html, например), в которых есть метаинформация, указывающая кодировку (meta content-type, например). Без этой метаинформации текстовый файл — не текстовый файл, а набор байтов, ибо в символы их можно превращать в совершенно разные долго и со вкусом.
Вообще говоря, нуждаются. Но это уже тема для совсем другого разговора.
Мои розовые очки
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Реализации awk и функция length
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 интерпретирует символы любым указанным вами способом, и я не очень понимаю, что в этом плохого? Некоторые способы не поддерживаются другими утилитами, ну и что?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Реализации awk и функция length
Абсолютно ничего. Я как раз и говорю о том, что это хорошо. :)
У системы нет т.з. Не доросла еще. Любая т.з. — это т.з. оператора.
Это оператор знает. Хорошо, если всегда :)
Зависит от того, что требуется сделать с текстом. С текстом, а не с произвольной байтовой цепочкой. Если текст, например, надо сравнивать без учета регистра, то очень даже «что». А превращение цепочки байтов в текст как раз и зависит от интерпретации, которая в файлах plain text как раз таки и не задана однозначно. При желании вообще любой, даже бинарный, файл можно интерпретировать как plain text. В некоторых случаях. Никто ведь не запрещает использовать control characters и не ограничивает длину строки.
Мои розовые очки
-
- Сообщения: 438
- Статус: Подопытный участник
Re: Реализации awk и функция length
Вы все не правы.
Пользователь, работающий с awk, может ничего не знать ни про какие байты, триты или бутылки, тем более не хочет он знать про кодировки. Он работает с текстом, который измеряется буквами, словами, предложениями.
Если программка выводит, что в слове «комар» 10 букв — то это жуткая, немыслимая ошибка.
Да, где-то глубоко в недрах системы такие программы может быть и нужны. Например, драйвер файловой системы может считать, что длины названия файла «комар» 10 байтов, это его дело.
Но для программы, прямо взаимодействующие с пользователем, такое просто недопустимо.
Пользователь, работающий с awk, может ничего не знать ни про какие байты, триты или бутылки, тем более не хочет он знать про кодировки. Он работает с текстом, который измеряется буквами, словами, предложениями.
Если программка выводит, что в слове «комар» 10 букв — то это жуткая, немыслимая ошибка.
Да, где-то глубоко в недрах системы такие программы может быть и нужны. Например, драйвер файловой системы может считать, что длины названия файла «комар» 10 байтов, это его дело.
Но для программы, прямо взаимодействующие с пользователем, такое просто недопустимо.
¡ Страсть к разрушению есть творческая страсть!
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
не пользуйтесь этой жуткой немыслимой программкой.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
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 438
- Статус: Подопытный участник
Re: Реализации awk и функция length
Почему-то разработчики Debian GNU/Linux предложили мне другой awk, не задав даже никаких вопросов, типа: "Вы действительно хотите, чтобы вместо gawk была установена ущербная mawk?"
¡ Страсть к разрушению есть творческая страсть!
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
видимо, у вас в системе не стоит ни одного пакета, зависящего от gawk:Nazyvaemykh писал(а): ↑12.05.2011 19:55Почему-то разработчики Debian GNU/Linux предложили мне другой awk, не задав даже никаких вопросов, типа: "Вы действительно хотите, чтобы вместо gawk была установена ущербная mawk?"
$ apt-cache rdepends gawk
поставьте gawk, приоритет в alternatives у него выше, чем у mawk. будет вам счастье.
p.s. казалось бы, и при чём тут разработчики debian gnu/linux?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 438
- Статус: Подопытный участник
Re: Реализации awk и функция length
Ну, если бы не Debian, я бы, может быть, и не узнал бы, что на свете есть mawk. awk является необходимой частью любой unix-подобной системы, стандарт posix. Безотносительно любых зависимостей в системе awk должен быть.
Я очень удивлен, что дебиановцы выбрали столь неудачную реализацию awk в качестве умолчательной. И даже не предупреждают об этом во всякого рода руководствах по установке.
Я очень удивлен, что дебиановцы выбрали столь неудачную реализацию awk в качестве умолчательной. И даже не предупреждают об этом во всякого рода руководствах по установке.
¡ Страсть к разрушению есть творческая страсть!
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
awk предоставляют три пакета: gawk, mawk, original-awk.Nazyvaemykh писал(а): ↑12.05.2011 23:24Я очень удивлен, что дебиановцы выбрали столь неудачную реализацию 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
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Реализации awk и функция length
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:59awk предоставляют три пакета: gawk, mawk, original-awk.
при установке минимальной системы пакет awk устанавливается как predepends пакета base-files.
какой из трёх будет выбран, зависит, видимо, от выбранного алгоритма резолвинга.
какая из реализаций работает в момент установки, не знаю.
насколько я понял - последняя. Впрочем, разницы наверное нет, потому-что скорее всего там POSIXLY_CORRECT
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Реализации awk и функция length
последняя по какому критерию? (и из какого списка? я знаю лишь два резолвера: из apt-get-а и aptitude-а). вообще при установке базовой системы awk резолвится (кем-то) именно в mawk.drBatty писал(а): ↑13.05.2011 20:38sash-kan писал(а): ↑13.05.2011 09:59awk предоставляют три пакета: gawk, mawk, original-awk.
при установке минимальной системы пакет awk устанавливается как predepends пакета base-files.
какой из трёх будет выбран, зависит, видимо, от выбранного алгоритма резолвинга.
какая из реализаций работает в момент установки, не знаю.
насколько я понял - последняя.
«там» — это где?QUOTE писал(а):Впрочем, разницы наверное нет, потому-что скорее всего там POSIXLY_CORRECT
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог