Если вы используете драйвер nvidia> = 365.20, попробуйте включить параметр «Force Full Composition Pipeline» в nvidia-settings
.
^M
- это возврат каретки (CR), который может быть указан как \r
для tr
или внутри $'...'
. \n
задает перевод строки (LF), который является ^J
. В Unix окончанием строки является LF, а в Windows разделителем строк является двухсимвольная последовательность CR-LF, поэтому текстовые файлы Windows, просматриваемые в Unix-системе, такой как Linux или macOS, выглядят так, как будто в конце каждой строки стоит ^M
, за исключением последней строки, в которой отсутствует последняя новая строка.
Вы можете удалить возврат каретки из файла с помощью tr
с
tr -d '\r' <somefile.txt >somefile.txt.new && mv somefile.txt.new somefile.txt
или более просто с помощью dos2unix
.
Чтобы избежать модификации файлов, вы можете проверять каждую строку при чтении и отделять CR в конце строки. Например, если вы используете read
для разбора значений, разделенных табуляцией, то удалите CR в конце последнего поля. Расширение параметра ${VAR%$'\r'}
дает значение VAR
за вычетом идущего следом CR и дает значение VAR
, если оно не заканчивается CR.
while IFS=$'\t' read -r -a line
do
line[$((${#line[@]}-1))]="${line[$((${#line[@]}-1))]%$'\r'}"
Type1="${line[0]}"
Type2="${line[1]}"
done < "$TXTFILE"
Используйте (для коротких строк):
${var//$'\015'}
Пример:
$ var=$'This is a test of a CR (\r) character'
$ echo "${var//$'\r'}"
This is a test of a CR () character
Для более длинных строк вам может потребоваться sed или awk.
Вот самый простой способ исправить ваш скрипт, просто добавьте «возврат каретки» в качестве внутреннего разделителя полей для команды чтения:
while IFS=$'\t\r' read -r -a line do Type1="${line[0]}" Type2="${line[1]}" done < $TXTFILE
Более полезный способ преобразования содержимого файлов "DOS" , у которых нет другого маркера содержимого, кроме окончания строки CR + LF (в отличие от LF только в Linux).
Для Ubuntu, сначала и только один раз, выполните
sudo apt install dos2unix
использование, как указано ниже, здесь с od
, используемым для проверки вывода
$ dos2unix < $TXTFILE | od -t x1z -w17 0000000 76 61 6c 75 65 31 20 20 20 20 76 61 6c 75 65 32 0a >value1 value2.< 0000021 76 61 6c 75 65 33 20 20 20 20 76 61 6c 75 65 34 0a >value3 value4.< 0000042 76 61 6c 75 65 35 20 20 20 20 76 61 6c 75 65 36 0a >value5 value6.< 0000063 76 61 6c 75 65 37 20 20 20 20 76 61 6c 75 65 38 0a >value7 value8.< 0000104 $ cat $TXTFILE | od -t x1z -w18 0000000 76 61 6c 75 65 31 20 20 20 20 76 61 6c 75 65 32 0d 0a >value1 value2..< 0000022 76 61 6c 75 65 33 20 20 20 20 76 61 6c 75 65 34 0d 0a >value3 value4..< 0000044 76 61 6c 75 65 35 20 20 20 20 76 61 6c 75 65 36 0d 0a >value5 value6..< 0000066 76 61 6c 75 65 37 20 20 20 20 76 61 6c 75 65 38 0d 0a >value7 value8..< 0000110
Это переведет не только окончания строк, но и другие специальные символов, в зависимости от параметров dos2unix
или его аналога unix2dos
(который устанавливается одновременно).