^M
é um retorno de carro (CR), que pode ser especificado como \r
para tr
ou dentro de $'…'
. \n
especifica um feed de linha (LF), que é ^J
. Uma terminação de linha Unix é LF e um separador de linha do Windows é a sequência de dois caracteres CR-LF, portanto, arquivos de texto do Windows exibidos em um sistema Unix como Linux ou macOS parecem ter ^M
no final de cada linha, exceto na última linha que está faltando sua nova linha final.
Você pode remover retornos de carro de um arquivo com tr
com
tr -d '\r' <somefile.txt >somefile.txt.new && mv somefile.txt.new somefile.txt
ou mais simplesmente com dos2unix
.
Para evitar a modificação dos arquivos, você pode verificar cada linha ao lê-la e desmarcar CR no final de uma linha. Por exemplo, se você estiver usando read
para analisar valores separados por tabulações, desmarque CR no final do último campo. A expansão de parâmetro ${VAR%$'\r'}
produz o valor de VAR
menos um CR à direita e gera o valor de VAR
se não terminar com CR.
while IFS=$'\t' read -r -a line
do
line[$((${#line[@]}-1))]="${line[$((${#line[@]}-1))]%$'\r'}"
Type1="${line[0]}"
Type2="${line[1]}"
done < "$TXTFILE"