каретка (^) в FS (gawk) - PullRequest
       2

каретка (^) в FS (gawk)

9 голосов
/ 16 апреля 2019

Обновление

Это была ошибка, и исправление доступно в git repo сейчас.


Я не могу понять, как обхват в FS интерпретируется.Например, вот мой file:

$ cat file
foo bar
baz quz

Я написал этот сценарий awk:

BEGIN{FS="^.";OFS="|"}{$1=$1}1

и ожидал такого вывода:

|oo bar
|uz baz

, нос gawk я получил это:

$ gawk 'BEGIN{FS="^.";OFS="|"}{$1=$1}1' file
||o bar
||z quz

И это становится странным с большим количеством точек:

$ gawk 'BEGIN{FS="^..";OFS="|"}{$1=$1}1' file
||bar
||quz
$ gawk 'BEGIN{FS="^...";OFS="|"}{$1=$1}1' file
||r
||z
$ gawk 'BEGIN{FS="^....";OFS="|"}{$1=$1}1' file
|bar
|quz

Я не смог найти объяснения ни в спецификации POSIX awk nor gawk manual .Ребята, не могли бы вы помочь мне понять, что происходит?Что мне здесь не хватает?

1 Ответ

3 голосов
/ 16 апреля 2019

Это явно ошибка и, возможно, утечка памяти.Когда вы просите напечатать NF раньше, поведение будет таким, как ожидалось:

$ gawk 'BEGIN{FS="^.";OFS="|"; $0="foo"; $1=$1; print}'
||oo
$ gawk 'BEGIN{FS="^.";OFS="|"; $0="foo"; $1=$1; print NF; print}'
2
|oo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...