Вы могли попробовать драйвер ATI с закрытым исходным кодом (именно это я в конечном счете сделал :-(), Но там я должен был увеличить Виртуальное разрешение для получения работы большого экрана.
Section "Screen"
Identifier "aticonfig-Screen[0]-0"
Device "aticonfig-Device[0]-0"
Monitor "aticonfig-Monitor[0]-0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Virtual 3046 1200
Depth 24
EndSubSection
EndSection
Я хотел иметь синхронизацию к vblank на моем выводе HDMI, и я не мог найти способ сделать это с драйверами с открытым исходным кодом. Вот почему я в конечном счете перешел к испорченным.
Поскольку Вы спросили “в одной строке”:
awk '{print>sprintf("%sfile.%d",NR%2?"odd":"even",PROCINFO["pid"])}' filename
Обратите внимание, что большая часть кода происходит из-за Вашего необычного выходного выбора имени файла. Иначе следующего кода было бы достаточно для помещения нечетных строк в “строку 1” и даже строки в “строке 0”:
awk '{print>"line-"NR%2}' filename
Это легко:
sed -n 2~2p filename
распечатает четные строки от имени файла
sed -n 1~2p filename
распечатает нечетные строки.
awk
, лично я использую его очень часто. Я никогда не говорил, что что-либо было 'Не POSIX' о awk
, Я обращался к ответу sed
опции. Конкретно ~
оператор, это - расширение GNU, которое все еще приемлемо для многих людей. Относительно 'использования AWK посторонним образом, I personally believe using
awk' для этой простой задачи является излишеством. Так эти +1 был для для того, чтобы выполнить задачу с sed
, более легкая утилита, чем awk
.
– J. M. Becker
01.11.2012, 17:55
Попробуйте это:
awk '{if(NR%2){print $0 > "odd.file"}else{print $0 > "even.file"}}' filename
Я предпочитаю быть совместимым POSIX, когда это возможно, таким образом, я думал, что отправлю этот альтернативный метод. Я часто использую их для искажения текста, прежде xargs
конвейеры.
sed -n 'n;p'
sed -n 'p;n'
Хотя я часто использую awk
, это - излишество для этого типа задачи.
Вы можете сделать это с помощью одного вызова sed
, не нужно читать файл дважды:
sed '$!n
w even
d' infile > odd
или, если хотите, в одной строке:
sed -e '$!n' -e 'w even' -e d infile > odd
Обратите внимание, что это не даст ожидаемый результат, если файл содержит только одну строку (строка будет иметь вид w
, преобразованный в четный
вместо нечетный
в качестве первого n
isn не выполнено). Чтобы этого избежать, добавьте условие:
sed -e '$!n' -e '1!{w even' -e 'd}' infile > odd
Как это работает? Ну, он использует три команды sed
:
n
- если не в последней строке , выведите пространство шаблонов на stdout
(который перенаправляется в файл odd
), замените его следующей строкой (теперь она обрабатывает четную строку) и продолжите выполнение оставшихся команд
w
- добавить пространство шаблонов в файл even
d
- удалить текущее пространство шаблонов и перезапустить цикл - побочным эффектом этого является то, что sed
никогда не будет автоматически печатать пространство шаблонов, поскольку он никогда не достигает конца скрипта
Другими словами, n
выполняется только на нечетных строках, а w
и d
выполняются только на четных строках. sed
никогда не выполняет автопечать, если, как я уже сказал, ввод не состоит из одной строки.
Для четных чисел код должен быть
awk 'NR%2==0' filename
& для нечетных чисел
awk 'NR%2==1' filename
Я бы выбрал perl
, потому что мне нравится perl
:
perl -pe 'BEGIN{open($e,">even_lines");open($o,">odd_lines")} $. % 2 ?select $o:select $e;'
Использует тот факт, что -p
неявно печатает, чтобы воспроизвести, как sed
работает - и мы используем select
, чтобы выбрать дескриптор файла, в который он записывает.