Вот решение Perl:
$ perl -F= -lae '$F[1]=~s/[^0-9]//g; push @h,$F[0]; push @l,$F[1];
END{print join ",",@h; print join ",",@l}' OpenSimStats.txt
TestreportsRootAgentCount,TestreportsChildAgentCount,TestreportsGCReportedMemory,TestreportsTotalObjectsCount,TestreportsTotalPhysicsFrameTime,TestreportsPhysicsUpdateFrameTime,TestreportsPrivateWorkingSetMemory,TestreportsTotalThreads,TestreportsTotalFrameTime,TestreportsTotalEventFrameTime,TestreportsLandFrameTime,TestreportsLastCompletedFrameAt,TestreportsTimeDilationMonitor,TestreportsSimFPSMonitor,TestreportsPhysicsFPSMonitor,TestreportsAgentUpdatesPerSecondMonitor,TestreportsActiveObjectCountMonitor,TestreportsActiveScriptsMonitor,TestreportsScriptEventsPerSecondMonitor,TestreportsInPacketsPerSecondMonitor,TestreportsOutPacketsPerSecondMonitor,TestreportsUnackedBytesMonitor,TestreportsPendingDownloadsMonitor,TestreportsPendingUploadsMonitor,TestreportsTotalFrameTimeMonitor,TestreportsNetFrameTimeMonitor,TestreportsPhysicsFrameTimeMonitor,TestreportsSimulationFrameTimeMonitor,TestreportsAgentFrameTimeMonitor,TestreportsImagesFrameTimeMonitor,TestreportsSpareFrameTimeMonitor,TestreportsLastReportedObjectUpdates,TestreportsSlowFrames
0,0,10,0,0,0,2144,0,89,0,0,25,1,553333320617676,554766654968262,0,0,0,0,0,0,0,0,0,1818239402771,0,00106373848393559,017440040409565,0,0,181818199157715,0,1
Флаг -a
заставляет perl
действовать как awk
и разделять каждую строку ввода по разделителю полей, заданному -F
(здесь =
) в массив @F
. -l
добавляет \ n
к каждому вызову print
, а -e
- это сценарий, который будет запускаться в каждой строке.
$ F [1] = ~ s / [^ 0-9] // g;
: удалите все нечисловые символы из 2-го поля (массивы начинают отсчет с 0, поэтому $ F [1 ]
- второе поле). push @ h, $ F [0]; push @ l, $ F [1];
: вставьте первое поле в массив @h
, а второе (теперь, когда нецифровые символы удалены) в массив @ l
. END {}
: выполняется один раз после обработки всего входного файла. print join ",", @ h;
: соедините массив @h
с ,
и распечатайте его. print join ",", @ l
: как указано выше, но для @l
. У вас не может быть двух отдельных сетей, использующих одно и то же адресное пространство. Если восходящий Ethernet-порт вашего сервера имеет /64, то интерфейс OpenVPN не может иметь такой же, потому что это отдельная сеть.
Технически на вашем сервере также нет всего /64. У него будет один или несколько адресов /64, настроенных на его интерфейсе Ethernet. У него нет возможности узнать, что ваш провайдер зарезервировал для него весь /64. Есть также провайдеры, которые помещают нескольких клиентов в общий /64. Сервер не может знать.
Таким образом, чтобы сделать это правильно, вам нужно иметь отдельный /64 для вашей сети OpenVPN, и этот /64 должен проходить через ваш сервер (обратите внимание на «сквозной», он не принадлежит серверу, сервер просто маршрутизирует для него трафик, часть адресов будет принадлежать VPN-клиентам). Это потребует, чтобы ваш провайдер настроил это для вас. Они настроят /64 в сети между своим маршрутизатором и вашим сервером (это /64, который у вас уже есть) и настроят маршрут для другого /64, у которого ваш сервер является следующим переходом (маршрутизатором).
Другим решением может быть настройка OpenVPN в режиме уровня 2 и создание моста Ethernet между портом Ethernet вашего сервера и интерфейсом ответвления OpenVPN. Таким образом, у вас не будет двух отдельных сетей, каждая из которых нуждается в отдельном /64. У вас будет одна сеть с мостом в ней. Для одной сети нужен только один файл /64. Вы можете подключить существующую сеть к своим VPN-клиентам. Вам придется решить, является ли это возможным решением для вас.
Третьим решением будет использование прокси-серверов NDP -.
ip neigh add proxy fd00 ::1 :1001 dev eth0 ip neigh добавить прокси fd00 ::1 :1002 dev eth0...
Я успешно использую его на своем DSL-соединении -дома, чтобы избежать DHCPv6 -PD.
подробнее здесь (Немецкий )http://www.thomas--schaefer.de/openvpn-fuer-altlasten.html