Вы можете установить параметр «Force Full Composition Pipeline » в терминале, например:
$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
Чтобы сделать это автоматически, проще всего поместить его в .bashrc
. Чтобы продолжить, просто введите это в терминале:
$ echo "$ nvidia-settings --assign CurrentMetaMode=\"nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }\"" >> ~/.bashrc
Вы можете выйти из системы и снова войти (или перезагрузиться ), чтобы применить это. Обратите внимание, что это решение предназначено только для одного монитора из-за «автоматического выбора -».
Другой метод заключается в том, чтобы сделать то же самое внутри ~/.nvidia-settings-rc
, но поведение может меняться со временем, в то время как в .bashrc
вы уверены в том, как это делается.
Что касается разрыва экрана, вы можете попробовать другие настройки.
Поскольку вы используете Manjaro, я предполагаю, что вы используете KDE. Вы можете указать оконному менеджеру (KWin )использовать тройную буферизацию или дождаться отображения текущего изображения перед обновлением экрана.
# echo "export __GL_YIELD=\"USLEEP\"" >> /etc/profile.d/kwin.sh
# echo "export KWIN_TRIPLE_BUFFER=1" >> /etc/profile.d/kwin.sh
Не включайте оба вышеперечисленных режима одновременно . Обязательно включите тройную буферизацию в nvidia-settings
, если вы включаете тройную буферизацию в KWin.
Лично я бы просто убрал запятую после печати:
awk -F "/" 'BEGIN{ORS=","}/\/tcp/ {print $1}' | sed 's/,$//'
или, чтобы добавить завершающую новую строку:
awk -F "/" 'BEGIN{ORS=","}/\/tcp/ {print $1}' | sed 's/,$/\n/'
Если вы действительно хотите сделать это в awk
, вы можете попробовать этот довольно неэлегантный подход:
awk -F "/" '/\/tcp/{ if(NR == 1){ printf "%s", $1} else{ printf ",%s",$1}}'
И, чтобы добавить завершающую новую строку:
awk -F "/" '/\/tcp/{ if(NR == 1){ printf "%s", $1} else{ printf ",%s",$1}}END{print ""}'
Не-awk
ответ, если предположить, что проблема настолько проста, как описано:
paste -s -d',' input_file
-s, --serial
указывает, что он будет обрабатывать файл (s )последовательно(paste
часто используется для объединения строк из нескольких файлов)
-d, --delimiters
определяет разделитель (по умолчанию — TAB)
Не устанавливайте для ORS значение ,
, потому что тогда вывод вашего скрипта не заканчивается новой строкой, и поэтому это недопустимый текстовый файл для POSIX и поэтому YMMV с тем, что другие скрипты, которые вы вызываете, делают с ним. Вместо этого оставьте ORS в покое, чтобы он сохранил любое значение, которое он должен иметь для вашей платформы, и печатайте ,
ПЕРЕД каждой строкой, которую вы хотите вывести, кроме первой:
awk -F '/' '/\/tcp/{printf "%s%s", sep, $1; sep=","} END{print ""}'
например:
$ seq 3 | awk '{printf "%s%s", sep, $0; sep=","} END{print ""}'
1,2,3
ЕСЛИ вы используете это в оболочке (, которую вы не указали, или пометьте ), по крайней мере, bash и ksh справятся с этим легко:
foo=$( awk -F/ '/\/tcp/{print $1}' )
# command-substitution $(.. ) trims the last newline, or more exactly
# it trims ALL trailing newline(s), so if there was an empty last line(s)
# (which the example in the Q doesn't) it is/they are also discarded
printf %s "${foo//$'\n'/,}" # change remaining=nonfinal newlines to commas
# and DON'T add newline; if you want ending newline make the formatstring '%s\n'
$(.. )
обрезка последней строки новой строки (s )и $'\n'
для новой строки соответствуют POSIX; в древних оболочках вы можете использовать фактическую новую строку в кавычках. ${foo//old/new}
замена только bash и ksh (не менее 93 ); в других оболочках за счет одного или двух дополнительных процессов, которые вы можете использовать
printf %s "$foo" | tr '\n',
Альтернативно, но менее эстетично, в любой оболочке POSIX вы можете использовать позиционные параметры:
( set -f; IFS=$'\n'; set -- $( awk -F/ '/\/tcp/{print $1}' ); IFS=,; printf %s "$*" )
# interpolating $(.. ) with IFS set and -f enabled
# breaks it at newlines (only) and doesn't glob, so $ 1..$# are now your lines
# using $* concatenates with IFS after each value except the last
# putting it in a subshell prevents -f IFS and args changes persisting;
# unneeded in a script or function that doesn't do anything affected subsequently
или только в bash (? )вы можете немного упростить с помощью
awk -F/ '/\/tcp/{print $1}' |( readarray -t x; IFS=,; printf %s "${x[*]}" )
Вы создаете единую выходную запись из данных, собранных по нескольким строкам. Итак, давайте сделаем это:
awk -F '/' '
BEGIN { OFS = "," }
/\/tcp/ { a[++n] = $1 }
END {
$0 = ""
for (i = 1; i <= n; ++i)
$i = a[i]
print
}' input_file
Собирает данные в массив a
, а в блоке END
строит новую запись с полями из этого массива. В самом самом конце запись печатается. Поля будут разделены запятыми, так как мы устанавливаем OFS
на запятую в блоке BEGIN
.
Тестирование:
$ awk -F '/' 'BEGIN {OFS=","} /\/tcp/ {a[++n]=$1} END {$0="";for (i=1;i<=n;++i) $i = a[i];print}' <<END_INPUT
first/tcp
no relevant
second/tcp
third/tcp
END_INPUT
first,second,third
(Эта последняя строка выше является выходом, в то время как ввод предоставляется через здесь -документ, разделенный END_INPUT
.)