Вот я и понял. На самом деле проблема была не в Linux или xrandr, но моя встроенная видеокарта просто не способна выводить 4k со скоростью 30 кадров в секунду, хотя она работала со скоростью 15 кадров в секунду, поэтому, если у вас возникла та же проблема, попробуйте меньшую частоту кадров.
awk -F'\t' '
NR==FNR{ if ($5=="ViroHEX"){ viro=1 } next }
viro && $1=="Software Version"{ $2="VIRO_v1" }
1
' A.txt FS=" = " OFS=" = " B.txt > result.txt
Это заменяет второе поле(NOVA_v1
)на VIRO_v1
во втором файле, если первое поле равно Software Version
и ViroHEX
присутствует где-либо в 5-м столбце первого файла.
Я предполагаю, что разделитель полей второго файла<space>=<space>
(не табуляция ).
Более простое решение, по моему скромному мнению. К сожалению, он использует другие инструменты, кроме awk.
awk '{print $5}' A.txt | grep -q VIROHEX && sed 2s/NOVA/VIRO/ B.txt
Часть перед && реализует условие, программа sed
заменяет текст в файле B.txt.
РЕДАКТИРОВАТЬ :Спасибо, AdminBee, за указание на ленивость моего решения. Лучше:
awk '{print $5}' A.txt | grep -q VIROHEX && sed '2s/=.*/= VIRO_v1/' B.txt
Аналогично решению Берндбауша , но нужно быть немного более внимательным к тому, что мы на самом деле сопоставляем и вставляем.
awk -F '\t' '$5 == "ViroHEX" { found = 1; exit } END { exit !found }' A.txt &&
sed '2 s/=.*/= VIRO_v1/' B.txt
Сначала используется awk
, чтобы определить, встречается ли точная строка ViroHEX
в пятом поле с разделителями табуляции -в любой строке файла A.txt
. Он не читает больше файла, чем необходимо, и завершает работу со статусом выхода, который позже используется для условного запуска sed
.
Команда sed
заменяет все, начиная с первого символа =
во второй строке B.txt
строкой = VIRO_v1
.
Если файл A.txt
не содержит ViroHEX
в пятом столбце, вывод не производится.
Следующий вариант всегда создает файл B.txt
, возможно, с заменой во второй строке:
if awk -F '\t' '$5 == "ViroHEX" { found = 1; exit } END { exit !found }' A.txt
then
sed '2 s/=.*/= VIRO_v1/'
else
cat
fi <B.txt
Если вместо изменения строки 2 вы хотите изменить строку с текстом Software Version =...
, измените выражение, используемое в вызовах sed
, на
s/^\(Software Version = \).*/\1 VIRO_v1/