Если Вы не возражаете переупорядочивать строки, и у Вас есть GNU coreutils (т.е. на невстроенном Linux или Cygwin, не слишком древнем с тех пор shuf
появившийся в версии 6.0), shuf
(“перестановка”) переупорядочивает строки файла случайным образом. Таким образом, можно переставить файл и диспетчеризировать первые m строки в один файл и остальных в другого.
Нет никакого идеального способа сделать ту отправку. Вы не можете просто объединить в цепочку head
и tail
потому что head
буферизовал бы вперед. Можно использовать split
, но Вы не получаете гибкости относительно имен выходного файла. Можно использовать awk
, конечно:
"output1"} else {print} }'
Можно использовать sed
, который неясен, но возможно быстрее для больших файлов.
output2
Или можно использовать tee
копировать данные, если Ваша платформа имеет /dev/fd
; это в порядке, если m является маленьким:
output1; } 3>&1 | tail -n +$(($m+1)) >output2
Портативно, можно использовать awk для диспетчеризации каждой строки в свою очередь. Обратите внимание, что awk не очень хорош при инициализации его генератора случайных чисел; случайность только определенно не не подходит для криптографии, но и даже очень хороша для численного моделирования. Семя будет тем же для всех awk вызовов на любом системном скручивании жгутов один второй период.
"output1"} else {print >"output2"}
--N;
}'
При необходимости в лучшей случайности можно сделать то же самое в Perl, который отбирает его RNG прилично.
", "output1" or die $!;
open OUT2, ">", "output2" or die $!;
my $N = `wc -l ) {
if (rand($N) < $m) { --$m; print OUT1 $_; } else { print OUT2 $_; }
--$N;
}
close OUT1 or die $!;
close OUT2 or die $!;
' 42
Ожидайте — я вижу его. Две вещи:
ATTRS{product}=="6011"
когда Вы имели в виду ATTRS{idProduct}=="6011"
. То отсутствие id
повредит его. Копия-и-вставка с udevadm info --attribute-walk
предотвратить опечатки как это.KERNEL=="ttyUSB[0-9]*"
. Это (очень ограничено) регулярное выражение, таким образом, [0-15]*
означает "любой из символов 0–1 или 5, повторил любое количество раз".Кроме того, Вы, вероятно, хотите использовать SYMLINK+=
вместо SYMLINK==
сохранить другие ссылки. Вы корректны, которым это должно быть SUBSYSTEMS=="usb"
соответствовать на продукте/поставщике.
Для нумерации устройств AMPM необходимо дать udev
число. К сожалению, это - часть usb-serial
устройство, не usb
один. Таким образом, Вы не можете просто использовать %s{port_number}
/$attr{port_number}
. Вместо этого одолжите прием у 60-persistent-serial.rules
в более новом udev
версии, и делают что-то вроде этого:
SUBSYSTEMS=="usb-serial", ENV{.LOCAL_PORT_NUM}="$attr{port_number}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="AMPM$env{.LOCAL_PORT_NUM}"
На более старом udev
, Вам, вероятно, придется использовать %E{…}
вместо $env{…}
.
Или, альтернативно, если Ваш udev
является достаточно новым, просто используйте /dev/serial/by-id
:
$ ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Jan 4 06:02 usb-067b_2303-if00-port0 -> ../../ttyUSB0
Необходимо видеть поставщика/код продукта там и все порты.
Имел подобные потребности; отобразить много последовательных устройств usb FTDI на уникальные имена, так, чтобы сценарии могли отослать их исключительно.
На Ubuntu 13.04, после некоторого лужения, следующее работало на меня.
Надо надеяться, может помочь:
#######################################################################################################################################
# Creating unique symbolic links to usb-serial devices based on their "serial" number and other such as "bInterfaceNumber" attributes.
# Use udevadm [e.g. udevadm info -a -p $(udevadm info -q path -n ttyUSB0)] to find the subsystems that match and their attributes.
#######################################################################################################################################
SUBSYSTEMS=="usb", ATTRS{serial}=="0000:00:1d.0", ENV{.LOCAL_serial}="$attr{serial}"
SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="00", SYMLINK+="ttyPapilioJTAG", MODE="0660"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="01", SYMLINK+="ttyPapilioConsole", MODE="0660"