Вы можете (временно) назначить пользователю права на запись в этот файл, например sudo chown youruseraccount /usr/local/MATLAB/R2016a/toolbox/local/pathdef.m
, а затем выполните установку и снова измените разрешения. Но это не сработает, если у вас нет на это привилегий. Другой вариант - изменить вызов savepath
для записи пользовательского pathdef.m
:
$ cd
$ matlab
...
>> mkdir wfdb
>> cd wfdb
>> [old_path]=which('rdsamp');if(~isempty(old_path)) rmpath(old_path(1:end-8)); end
...
>> savepath ~/pathdef.m
>> exit
...
$ matlab
...
>> wfdb
Предполагается, что ваш домашний каталог - это ваша папка запуска для Matlab, хотя pathdef .m
можно было сохранить в какой-либо другой каталог, и Matlab запускался из этого каталога, или исходный путь к папке был изменен в настройках Matlab.
Блок BEGIN
запускается до обработки любого ввода, поэтому $ 0
еще не инициализирован.
Блок END
ничего не делает с $ 0
, который сохраняет свое последнее значение. В вашем сценарии AWK это только последняя прочитанная строка, потому что AWK считывает все свои входные данные построчно, выполняет свою обычную обработку разделения полей (присваивая $ 0
и так далее), но никогда не находит соответствующий блок; но, например,
seq 42 | awk '{ $0 = "21" } END { print }'
выводит 21, а не 42, поэтому это не тот случай, когда «при запуске блока END
последняя строка загружается в $ 0
».
Это не описано в справочной странице gawk (1)
, но описано в mawk (1)
(очевидно, для этой реализации AWK):
Аналогично , при входе в действия
END
,$ 0
, поля иNF
имеют свое значение, не измененное по сравнению с последней записью.
В руководстве GNU AWK упоминается такое поведение :
Фактически, все BWK
awk
,mawk
иgawk
] сохранить значение$ 0
для использования в правилахEND
.
«BWK awk
» - это awk
Брайана Кернигана, «один истинный awk
» ; он реализовал это поведение в 2005 году, как описано в его файле FIXES
:
24 апреля 2005 г .: изменен
lib.c
, так что значения$ 0
и др. сохраняются в END block, по-видимому, как того требует posix. благодаря Хаварду Эйднесу для отчета и кода.
Это изменение видно в «одной истинной awk
» истории . Последний выпуск BWK awk
ведет себя так же, как GNU AWK:
$ echo three fields here | ./awk '{ $0 = "one" } END { print $0 " " NF }'
one 1
$ echo three fields here | ./awk 'END { $0 = "one"; print $0 " " NF }'
one 1
Согласно руководству GNU awk, немного неясно, что $0
должно содержаться в правиле END. POSIX требует, чтобы NF
"сохранял [свое] значение" (*), но не упоминает $0
.
Вероятнее всего, по недосмотру в стандарте не сказано, что
$0
также сохраняется, хотя по логике можно было бы подумать, что так и должно быть. Фактически, все BWK awk, mawk и gawk сохраняют значение$0
для использования в правилахEND
. Имейте в виду, однако, что некоторые другие реализации и многие старые версии Unix awk этого не делают.
В некотором смысле я нахожу такое поведение логичным. Оставив $0
для блока END
, можно легко получить доступ к последней записи, если это необходимо. К первой записи легко получить доступ с помощью NR == 1 {...}
, поэтому специальное ключевое слово не требуется. С другой стороны, выполнение блоков BEGIN
перед загрузкой первой записи позволяет установить FS
или RS
вовремя, чтобы они стали активными для первой записи.
(* Что бы это ни значило, см. комментарии.)