Думаю, это можно сделать с помощью ssh. Взгляните на переадресацию соединений через ssh.
ssh -R remote_socket:host:hostport
Если, например, ваш веб-серверexample.com
:
ssh -R 8081:localhost:8081 example.com
При запуске на вашем raspberry pi все соединения, указывающие на порт 8081 на вашем веб-сервере, перенаправляются через ssh на ваш raspberry pi.
Я рекомендую сначала попробовать это на другом хосте в вашей локальной сети, чтобы убедиться, что он соответствует вашим потребностям. Из малинового пи:
ssh -R 8081:localhost:8081 other_lan_host
В качестве альтернативы вы можете использовать параметр -L
и запустить команду с хоста локальной сети, который вы тестируете с помощью :
ssh -L 8081:raspberrypihost:8081
Попробуйте это:
$ alias median="sort -n|awk ' { a[i++]="\$1"; } END { x=int((i+1)/2); if (x < (i+1)/2) print (a[x-1]+a[x])/2; else print a[x-1]; }'"
$ cat file_with_numbers| awk '{print $1}'|median
Если вы не хотите заново изобретать велосипед, вы также можете использовать GNUdatamash
:
alias median 'datamash median 1'
datamash
предполагает столбцы с разделителями табуляции, хотя вы можете изменить разделитель с помощью -t
.
Для вашей конкретной проблемы обратите внимание, что расширение $parameter
в (t )csh выполняется в двойных кавычках, но в отличие от Bourne -, как и оболочки, его нельзя отключить с помощью обратной косой черты, поэтому вы нужно что-то вроде:
alias median "sort -n | awk '{a[NR]="\$"1}; END {x = int(NR/2); print NR % 2 ? a[x+1] : (a[x]+a[x+1])/2}'"
То есть выйти из двойных кавычек, чтобы ввести $
как \$
, или пойти с подходом Марка и использовать одинарные кавычки, но выйти из них, чтобы ввести буквальные одинарные кавычки.
Вы можете поместить в псевдоним последовательность команд из одной строки -, но вам может понадобиться добавить обратную косую черту и одинарные или двойные кавычки здесь и там. Но если вам не нужно вызывать псевдоним с параметрами или элементами из истории оболочки или вам нужно максимизировать скорость, иногда проще просто поместить последовательность команд в виде -в файл, пометить его как исполняемый и поместить куда-нибудь. в пути поиска($PATH
или $path
).
Но сделать псевдонимом следующее:
sort -n | awk '{ a[i++]=$1; } END { x=int((i+1)/2); if (x < (i+1)/2) print (a[x-1]+a[x])/2; else print a[x-1]; }'
Необходимо убедиться, что
$
либо находится внутри строки, заключенной в одинарные кавычки, либо находится вне какой-либо строки в кавычках, и ему предшествует\
(спасибо, Стефан, за альтернативу)Не используйте \!:1
для создания $1
. \!:1
будет использоваться, если вы передадите параметр своему псевдониму. Вы просто хотите, чтобы литерал $1
был виден awk.
В этом случае безопаснее всего заключить как можно большую часть псевдонима в одинарные кавычки и использовать "
только для заключения в одинарную кавычку. Вы увидите два вхождения "'"
ниже.
ubuntu% alias median 'sort -n | awk '"'"'{ a[i++]=$1 ; } END { x=int ( ( i+1 ) /2 ) ; if ( x < ( i+1 ) /2 ) print ( a[x-1]+a[x] ) /2 ; else print a[x-1] ; }'"'"
ubuntu% seq 1 9 | median
5